从GUI访问嵌套函数

时间:2016-03-04 11:04:02

标签: matlab user-interface nested

我正在尝试使用几乎所有功能于一体的函数,在主函数和嵌套函数中创建GUI和必要的变量,以用作回调操作。

当我有

function[]=foo()
A=1;

uicontrol('style','pushbutton','callback','A=bar(A);')

function[OUT]=bar(IN)
OUT=IN+1;

我收到错误:

Undefined function 'bar' for input arguments of type 'double'.

Error while evaluating uicontrol Callback`

如果foo是一个脚本,并且在bar文件中定义bar.m则可行。在我看来,回调在MATLAB工作空间中的默认变量和当前工作目录中的脚本/功能中使用。 如何访问调用函数中定义的变量(此处为变量A)和嵌套在调用函数中的函数(此处为函数bar

1 个答案:

答案 0 :(得分:2)

为了定义回调,我找到了使用anonymous functions的最可靠方法。话虽如此,如果barfoo的嵌套函数,那么它已经可以访问A并可以修改A

function = foo()
    A = 1;

    uicontrol('style', 'pushbutton', 'callback', @(s,e)bar())

    % This is a nested function that already has access to A
    function bar()
        A = A + 1;
    end

    % Let's call bar here to demonstrate it updates A
    bar();
    disp(A);
end

此外,您的回调实际上无法将输出传递回作为回调的控件的工作区。如果要返回结果,您可能希望1)将结果存储在图形对象的UserData中,2)使用我们已经显示的嵌套子函数,或者3)将句柄传递给自定义句柄对象回调(classdef object < handle