主要内容

持续的

定义持久变量

描述

例子

Persistent var1…varN声明变量var1……varN是持久的。持久变量是声明它们的函数的局部变量,但它们的值在调用函数之间保留在内存中。MATLAB代码®命令行和其他函数不能更改持久变量。

当MATLAB第一次遇到一个特定的持续的语句,它将持久变量初始化为一个空矩阵([]).

当您清除或修改内存中的函数时,MATLAB将清除持久变量。要将函数保存在内存中,使用mlock

例子

全部折叠

创建函数myFun在当前工作文件夹中。每次调用函数时,的值n增加。

函数myFun ()持续的n如果Isempty (n) n = 0结束N = N +1结束

在命令提示符下,调用myFun三次。

我的乐趣,我的乐趣,我的乐趣
N = 1 N = 2 N = 3

清晰的myFun再调用两次。清除函数也会清除持久变量。

清晰的myFunmyFun myFun
N = 1 N = 2

写一个函数,如果从上一个日志条目开始至少过了3秒,就记录数据。定义logTime作为存储最后一次时间的持久变量logData已写入文件。

在当前工作文件夹中的文件中,定义logData函数。

函数logData(帧,n)持续的logTime currTime =日期时间;如果isempty(logTime) logTime =当前时间;disp ('记录初始值。') dlmwrite(帧,n)返回结束dt = currTime - logTime;如果Dt >秒(3)disp(“日志”。) dlmwrite(帧,n,“添加”) logTime = currTime;其他的disp ([“不是伐木。”num2str(秒(dt))“从上次日志开始的SEC。”])结束结束

在命令提示符下,调用logData在一个循环中。循环有10次迭代,每次迭代大约需要1秒。因此,MATLAB将4个值写入myLog.txt(大约在0、3、6和9秒)。

n = 1:10 pause(1) logData(“myLog.txt”兰特)结束
记录初始值。没有日志记录。1.005秒自上次日志。没有日志记录。2.009秒自上次日志。日志记录。没有日志记录。自上次日志以来1.007秒。没有日志记录。2.013秒自上次日志。 Logging. Not logging. 1.005 sec since last log. Not logging. 2.007 sec since last log. Logging.

调用logData函数再次添加另一个值。

logData (“myLog.txt”兰特)
日志记录。

清除logData函数重新初始化持久变量。调用logData函数了。这一次,函数将被覆盖myLog.txt而不是附加一个值。

清晰的logDatalogData (“myLog.txt”兰特)
记录初始值。

提示

  • 持久变量与全局变量类似,因为MATLAB为两者创建了永久存储。它们不同于全局变量,因为持久变量只有声明它们的函数才知道。因此,MATLAB命令行代码或其他函数不能更改持久变量。

  • 由于MATLAB将一个持久变量初始化为一个空矩阵([]),通常函数检查持久变量是否为空,如果是,则初始化它。

    函数myFun ()持续的n如果Isempty (n) n = 0结束N = N +1;结束

  • 将变量声明为持久变量必须在对该变量的任何其他引用之前,包括输入或输出参数。例如,持续的以下函数中的声明无效。

    函数myfunA (x)持续的x结束函数myfunB x = 0;持续的x结束

  • 要清除持久变量,请使用清晰的使用声明该变量的函数名。例如,明确myFun

扩展功能

版本历史

R2006a之前介绍