函数调用之间的变量持久化

Ami*_*mit 2 matlab scope

假设我想调用一个函数两次,但是我需要函数来记住它在第一次调用时初始化的变量,这样可以在后续调用中更改执行.

例如,如果我有一段这样的代码:

function random
 if exist('a','var') == 0
   fprintf('hello\n');
   a = 1;
 else 
   disp('goodbye\n');
 end
end  
Run Code Online (Sandbox Code Playgroud)

a当我再次调用代码时,如何让MATLAB记住等于1?具体来说,我希望在我正在编写的程序中使用它作为按钮回调函数.

Ton*_*ony 5

MATLAB支持关键字persistent,您将使用如下:

function toggleval_persist
    % Set up the persistent variable and initialize it.
    persistent a;
    if isempty(a)
        a = 0;
    end      

    if ( a == 0 ) 
        disp('hello');
        a = 1;
    else
        a = 0; 
        disp('goodbye');
    end
end 
Run Code Online (Sandbox Code Playgroud)

另外,我不建议使用持久变量来切换按钮状态.如果您正在使用MATLAB的UI系统,则按钮的状态通常可在GUI的对象结构中使用.

  • 您还可以使用`setappdata` /`getappdata`在句柄上存储任意用户定义的状态,例如按钮.如果你想在每个小部件的基础上切换一些东西,而不是之前是否有任何*调用该函数,那将是这样做的方法. (2认同)