clearing a persistent variable makes it no longer persistent

This is something that keeps catching me out. I do not think it is explicitly documented anywhere, though it could be implied in the matlab instructions to clear persistent variables by clearing the function.
If you clear a persistent variable using clear variablename from within the function, it ceases to be persistent.
Something like this would be handy to have as there are situations where I want to clear some, but not all persistent variables in a function. Clear allows you to do it all in one line. The alternative is to set them all to [], which is a bit more verbose.

댓글 수: 1

Hi @CM, I think it is mentioned in documentation of persistent that clearing the function that declares the variable clears the persistent variable. You can refer to the Tips section of this page: https://www.mathworks.com/help/matlab/ref/persistent.html#:~:text=To%20clear%20a%20persistent%20variable%2C%20use%20clear%20with%20the%20name%20of%20the%20function%20that%20declares%20the%20variable.%20For%20example%2C%20clear%20myFun
When the clear command is used within a function to clear a variable, it removes the variable from the workspace entirely. This means that not only does it cease to be persistent, but it also gets cleared from memory.:
function foo()
persistent counter;
counter = 43;
% Display
disp(['Counter value: ' num2str(counter)]);
disp("Before clearing counter..")
disp(whos('counter'))
% Clear the persistent variable (ceases to be exists)
clear counter;
disp("After clearing counter..");
disp(whos('counter'));
end
foo()
Counter value: 43 Before clearing counter.. name: 'counter' size: [1 1] bytes: 8 class: 'double' global: 0 sparse: 0 complex: 0 nesting: [1x1 struct] persistent: 1 After clearing counter..
Is there any additional information you're seeking?

댓글을 달려면 로그인하십시오.

 채택된 답변

埃博拉酱
埃博拉酱 2024년 5월 22일

0 개 추천

You can use deal to set multiple variables to the same value at once (such as an empty value, in your case). Using clear in a function is very unusual and is not the right choice in most cases.

추가 답변 (1개)

CM
CM 2024년 5월 22일

1 개 추천

Thanks 埃博拉酱 and Abhishek. Deal looks like what I was after.

카테고리

도움말 센터File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

제품

릴리스

R2023a

질문:

CM
2024년 5월 22일

답변:

CM
2024년 5월 22일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by