MATLAB:GUI和全球变量



我在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。使用这些,您可以轻松地完成各种很酷的事情 - 例如在无关的数字之间传输数据。

实现单身模式而不是全局很有帮助。我还在这里给出了一个显示观察者模式的答案。

相关内容

  • 没有找到相关文章

最新更新