您可以做什么(在GUI中使用此代码的光学器件中)设置一个标志,告诉您是否已初始化a
并将其作为参数传递给函数random
。例如,在GUI的句柄结构中存储标志(我们称之为a_flag
)将允许您跟踪其值(例如实际存储在handles.a_flag
中)。
所以,换句话说,你可以创建GUI的过程中设置的标志为0(或在其Opening_Fcn
如果您使用的GUIDE)如下:
handles.a_flag = false;
,然后叫random
功能,你可以用拨打:random(handles.a_flag)
:
function random(a_flag)
if ~a_flag
%// Update the flag
a_flag = true;
fprintf('hello\n');
a = 1;
else
fprintf('goodbye\n');
end
end
即使简单的办法是使用全局变量...但我喜欢这个主意好:)
EDIT
我的代码的重点是要证明我们可以使用GUI的句柄结构(如OP所要求的)来存储标志的值。由于可以从每个回调中访问结构,因此按钮将按照持久变量相同的方式更新它。
请试试这个代码,看看我的意思:
function TestGUI
clear
clc
hFigure = figure('Position',[200 200 200 150]);
handles.Disp_a_title = uicontrol('Style','text','String','a','Position',[20 100 60 20]);
handles.Disp_aflag = uicontrol('Style','text','String','0','Position',[100 100 60 20]);
handles.Button = uicontrol('Style','Push','Position',[50 50 60 20],'String','Update a','Callback',@(s,e) PushCb);
a = 0;
handles.a_flag = false;
guidata(hFigure,handles)
function PushCb(~,~)
handles = guidata(hFigure);
fprintf('Flag is %i\n',handles.a_flag)
if handles.a_flag == false;
disp('hello\n');
a = 1;
handles.a_flag = true;
else
disp('goodbye\n');
end
guidata(hFigure,handles)
end
end
按两下按钮可以导致在命令窗口中下面的输出:
Flag is 0
hello\n
Flag is 1
goodbye\n
我的理解,从是预期行动OP正在寻找。
静态变量通常不是一个好主意,请考虑一个'class'? – user3528438
'class'如何解决这个问题? –