How to reset persistent variables in nested functions?
조회 수: 3 (최근 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!