persistent与global相比:没有明显特点

       用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型比较好,轻车熟路好把握。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值