您可以做什麼(在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'如何解決這個問題? –