如何从MATLAB的另一个函数文件执行回调函数?
我有两个函数:一个用按钮创建UI,另一个用来执行与按下按钮相同的功能。如何从MATLAB的另一个函数文件执行回调函数?
当我深入到数字与get(gcf,'children')
我找到按键,具有回调属性,它看起来像这样:
ans =
[function_handle]
[ 1]
[ 1]
[1x6 double]
现在,据我了解,与第一个数组元素,我应该能够执行与从UI按下按钮时执行的功能相同的功能,但我该怎么做?我尝试了一切,但似乎没有任何工作。
从你得到的按钮回调的结果,它出现回调已按以下方式(只是举例)创建:
hButton = uicontrol(...,'Callback',{@button_callback,1,1,[1:6]});
在回调函数button_callback
定义如下:
function button_callback(hObject,eventdata,a,b,c)
...
end
注意到有two extra arguments in the input argument list为回调函数:hObject
和eventdata
(事件数据的结构)(调用回调对象的句柄)。
如果你想与应该传递给它的3个额外的参数(1
,1
,和一个1×6阵列)来调用功能句柄,则需要也传递参数为hObject
和eventdata
输入。以下是如何调用该函数会看(使用变量ans
):
ans{1}(hButton,[],ans{2:end});
您首先从单元阵列(ans{1}
),那么call it using parentheses as you would any other function得到函数句柄。对于hObject
,您可以将句柄传递给uicontrol对象(如果不需要,则为空值),对于eventdata
,您可以传递一个空值。然后从单元阵列获取附加值作为comma-separated list(ans{2:end}
),并将每个值作为单独的附加参数传递给该函数。
你可以用()运算符来调用它,或者你可以将它传递给feval。你需要首先从单元阵列中提取它。
x; % holds your ans from original question
fcn = x{1}; % Extract from cell array
fcn(); % call with() syntax
feval(fcn); % call with feval() syntax
如果这不起作用,请张贴确切的代码和错误信息,以便我们可以看到发生了什么问题。
谢谢!两个很好的答案。 – JussiR 2009-12-01 09:04:29
在回答这个问题之后,没有太多的问题要问。 :)我得到的是单元阵列..以前从未使用过它们,所以没有意识到我应该以不同的方式读取它们({}而不是[])。 – JussiR 2009-12-01 09:06:46