我正在尝试使用几乎所有功能于一体的函数,在主函数和嵌套函数中创建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
)
答案 0 :(得分:2)
为了定义回调,我找到了使用anonymous functions的最可靠方法。话虽如此,如果bar
是foo
的嵌套函数,那么它已经可以访问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
)