用matlab编写一个计算室内冲激响应(room impulse response,RIR)程序,其中有个六重循环。每次循环只是修改一个变量,但每次计算都需要一组参数,计算结果则累积到RIR值上。RIR是一个比较大的向量,如果每次都当成输入参数带入再当成输出参数带出,很浪费内存,不合适。于是将其定义为全局变量,没有问题。想起persistent类型变量与global类似,又换成persistent类型。几次纠错尝试之后,得到如下几点认识
1,persistent类型变量与global类型变量使用上没有明显区别。凡是用到的地方,都要声明。
2,persistent类型变量与其声明所在函数共存亡,如果清除函数(clear xxFun)则变量消失,不清除则像全局变量一样一直存在
3,persistent类型变量大概能增加一些私密性,并非全局可见,只能在其声明所在函数中看到,访问。
MATLAB R2018b persistent参考页中所提供举例,就是那个统计函数被调用几次的程序,实际上不完整,看不到其所说的n的值。加上一行才能在屏幕上出现n值
function myFun()
% 统计本函数被调用次数
persistent n
if isempty(n) % 这是头一次被调用,n刚刚声明,是【】
n = 0;
end
n = n+1;
disp(['n= ' num2str(n)]);
end
把这个程序存盘。然后在命令行执行myFun,执行一次屏幕上会输出一个n=不同自然数的结果。如果不加disp一行,啥也看不到:既没有n变量,更看不到值;如果想用n=myFun来带出结果,则违反persistent类型变量的语法。
一般情况下,感觉多处共享的变量还是用global型比较好,轻车熟路好把握。