您可以只将hObject
参数传递给您的函数,并在需要时使用guidata
;检索您的值 IE,
function some_callback(hObject, handles, ...)
myLoopingFunction(hObject, ...);
function myLoopingFunction(hObject, ...)
for someVar = something
% Update handles structure
handles = guidata(hObject);
end
或者,您可以创建一个句柄对象并将其放入句柄结构中;例如,
% In a separate file:
classdef uiState < handle
% Probably should give this class a less general name...
properties
StatusData
end
end
% In your UI file:
function some_callback(hObject, handles, ...)
handles.state = uiState();
handles.state.StatusData = false;
% Now, when you modify handles.StatusData, the version used by
% myLoopingFunction will also be updated, because they point to
% the same object!
myLoopingFunction(handles.state);
function myLoopingFunction(state, ...)
for someVar = something
% Now you just have to check state.StatusData
end
对于简单的情况,我会使用第一种方法。对于更复杂的情况,必须跟踪几个参数并且它们以复杂的方式相互作用,我会使用第二种。如果您在某个变量中有大量数据并且希望阻止将其复制到对 UI 的每次调用中,则第二种方法也很有用。
就个人而言,对于复杂的 UI,我通常会创建一些应用程序类来跟踪用户界面(并为其提供命令行界面)并确保它始终可用于我的 UI,但这有点像使用在这个简单的案例中,用大锤打开果酱罐。