How to reset persistent variables in nested functions?
显示 更早的评论
I can't figure out whether this is a MATLAB bug or a PEBKAC issue, but in case of the latter, I figured I'd check here first.
I have a nested function with some persistent variables. Occasionally, when some condition is met in the outer function, I wish to be able to reset these variables to their initial state (i.e. [ ]). It doesn't seem to work to use "clear MyNestedFunc" in the outer function:
function MyFunc()
MyNestedFunc();
MyNestedFunc();
clear MyNestedFunc
MyNestedFunc();
function MyNestedFunc()
persistent foo
if isempty(foo)
foo = 1;
else
foo = foo + 1;
end
disp(foo)
end
end
My desired output from this is 1, 2, 1, but what I get is 1, 2, 3.
The way to do it so that it works is apparently to make foo a persistent variable in the outer function, but for reasons of code clarity and organization I'd really prefer to encapsulate it inside the nested function if I could.
Is this a MATLAB bug because "clear MyNestedFunc" doesn't have the expected effect, or am I trying to do something in the wrong way?
采纳的回答
更多回答(1 个)
Walter Roberson
2011-2-14
0 个投票
The documentation indicates somewhere that persistent variables are associated with the parsed version of file, not with the workspace, and are reset when the file as a whole is reloaded.
3 个评论
Jan Rubak
2011-2-14
Walter Roberson
2011-2-14
This is a matter that I "read between the lines" from the description of "clear" and "rehash".
Jan Rubak
2011-2-14
类别
在 帮助中心 和 File Exchange 中查找有关 Scripts 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!