我在GUI中的回调中有几个功能(在单独的文件中定义),如:
function myFunction_Callback(hObject, eventdata, handles)
[output] = function1(input);
[output] = function2(input);
[output] = function3(input);
guidata(hObject, handles);
现在,可以说我正在定义函数1,我想将局部变量存储在手柄中。当我喜欢这样的时候:
[output] = function1(input)
localVariable = [1 2 3];
handles.myVariable = localVariable;
handles.myVariable
'消失'函数1完成后。如何将其"留在"方面?我是否必须将其定义为输出,然后将其定义为这样的手柄:
[output, localVariable] = function1(input)
...
localVariable = [1 2 3];
及以后
function myFunction_Callback(hObject, eventdata, handles)
[output, handles.myVariable] = function1(input);
[output] = function2(input);
[output] = function3(input);
guidata(hObject, handles);
??我知道这个问题听起来很愚蠢,可能还不清楚,但是请原谅我,我对Gui感到非常困惑,并处理新手:)谢谢!
是的,您的一般方法还可以,尽管有几件事:
-
handles
通常是指包含对象的手柄的数据结构。向此添加其他类型的数据是有效的,但不建议使用,因为它只是令人困惑。 -
围绕功能的单个输出的支架是不需要的。当然,这是一种口味和编码风格的问题,但这是我建议反对的。仅使用括号将属于属于的事物分组。
-
您的
input
是否在某处包含handles
?同样,功能output
s是否包含handles
的修改版本?如果没有函数修改handles
,那么每次调用回调时,当然都无需重新保存它...
因此,总而言之,这样做:
function myFunction_Callback(hObject, eventdata, handles)
...
output = func1(input);
output = func2(output);
output = func3(output);
...
guidata(hObject, output); % <-- NOTE: output contains handles
function output = func1(input)
...
output.handles = input.handles;
...
output.localVar = [1 2 3];
...
通过此类功能传递数据可能很痛苦。
我发现为这些原因应用面向对象的编程非常有帮助。特别是将您的班级定义为classdef myclass < handles
。使用这些,您可以轻松地完成各种很酷的事情 - 例如在无关的数字之间传输数据。
实现单身模式而不是全局很有帮助。我还在这里给出了一个显示观察者模式的答案。