我有一个调用函数的脚本,该函数是在单独的文件中编写的,并且包含仅在main函数内部的子函数。在我的一个子函数中,我有持久变量,我想在每次运行主脚本时清除它。我怎么能这样做?另外,我的代码中有断点,我更愿意在清除持久变量时保留它们 - 如何做到这一点?
MainScript.m脚本:
clear variables;
for iterNum=1:5
dataOut = MyMainFunction(iterNum);
end
disp(dataOut);
MyMainFunction代码:
function dataOut = MyMainFunction(iterNum)
if (iterNum==1)
clear MySubFunction;
end
dataOut = MySubFunction();
end
function dataOut = MySubFunction()
persistent idx;
if isempty(idx)
idx=1;
end
dataOut=idx;
idx=idx+1;
end
我想在每次运行MainScript.m时清除“idx”持久变量,但当然只要脚本运行就保留该变量。
谢谢,约翰
答案 0 :(得分:3)
我看到的最简单方法是在函数名称后面调用clear
:
clear MySubFunction
而不是
clear variables;
这应该清除该特定函数中的所有持久变量。这可能会产生副作用,即删除存储的JIT副本,导致它在下次调用时被重新解析。
如果您之前munlock
使用了您的功能,则可以使用mlock
。
或强>
您可以在函数中定义一组专门用于清除持久变量的参数,并在主文件的开头用这种语法调用该函数。
答案 1 :(得分:0)
不幸的是,另一个答案是部分错误的 - 使用clear MySubFunction
来清除子函数中的持久变量是 NOT 。
引用an answer by a MathWorks staff member,
只能清除顶级或主要功能(与文件同名)。要清除任何本地或嵌套函数,必须清除main函数,并且在main函数(或文件中的任何其他函数)运行时无法完成。
和
只能从内存中清除整个m文件。整个文件作为一个单元进行管理,因此无需清除主函数就可以清除子函数。
因此,您的选择是
MyMainFunction
或MainScript.m
clear
,而是给MySubFunction
一个额外的参数,告诉它自己重置持久变量