How to reset persistent variables in nested functions?
4 次查看(过去 30 天)
显示 更早的评论
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?
0 个评论
采纳的回答
Matt Fig
2011-2-14
A hokey workaround:
function MyFunc()
resetfoo = false; % issued once at beginning.
MyNestedFunc();
MyNestedFunc();
MyNestedFunc();
resetfoo = true; % whenever we want to reset foo.
MyNestedFunc();
MyNestedFunc();
MyNestedFunc();
function MyNestedFunc()
persistent foo
if resetfoo || isempty(foo)
foo = 1;
resetfoo = false;
else
foo = foo + 1;
end
disp(foo)
end
end
更多回答(1 个)
Walter Roberson
2011-2-14
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 个评论
Walter Roberson
2011-2-14
This is a matter that I "read between the lines" from the description of "clear" and "rehash".
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Interactive Control and Callbacks 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!