主要内容

持续的

定义持久性变量

描述

例子

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

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

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

例子

全部折叠

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

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

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

myFun myFun myFun
N = 1 N = 2 N = 3

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

清晰的myFunmyFun myFun
N = 1 N = 2

编写一个函数,如果距离上一次日志条目至少有3秒,则记录数据。定义logTime作为存储最后一次时间的持久变量logData写入文件。

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

函数logData(帧,n)持续的logTime currTime = datetime;如果isempty(logTime) logTime = currTime;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

Baidu
map