如何在MATLAB中从另一个函数文件执行回调函数?

3
我有两个函数:一个用于创建带有按钮的用户界面,另一个函数我想要执行与按下按钮相同的功能。
当我使用get(gcf,'children')查看图表时,我会找到这些按钮,并且它们具有类似以下形式的回调属性:
ans = 
    [function_handle]
    [              1]
    [              1]
    [1x6 double]

据我了解,使用第一个数组元素,我应该能够执行与从UI中按下按钮时执行的相同的函数,但我该怎么做呢?我尝试了一切,但好像没有什么可行的。

2个回答

3

根据您获得的按钮回调结果,似乎回调是按照以下方式创建的(仅作为示例):

hButton = uicontrol(...,'Callback',{@button_callback,1,1,[1:6]});

回调函数button_callback的定义如下:

function button_callback(hObject,eventdata,a,b,c)
  ...
end

请注意,在回调函数的输入参数列表中有两个额外的参数hObject(调用回调的对象的句柄)和eventdata(事件数据结构)。
如果您想使用应该传递给它的3个附加参数(11和一个1x6数组)调用函数句柄,您还需要为hObjecteventdata输入传递参数。这是调用函数的方法(使用您的变量ans):
ans{1}(hButton,[],ans{2:end});

你需要先从单元数组(ans{1})中获取函数句柄,然后使用括号调用它,就像调用其他任何函数一样。对于hObject,你可以传递uicontrol对象的句柄(如果不需要,也可以传递空值),对于eventdata,你只需传递一个空值。然后从单元数组中作为逗号分隔列表ans{2:end})取出附加值,并将每个附加值作为单独的参数传递给函数。

这个回答之后没什么可问的了。 :) 让我有点困惑的是那些单元数组.. 以前从来没有用过,所以没有意识到我应该以不同的方式读取它们(使用{}而不是[])。 - undefined

1

你可以使用()运算符调用它,或将其传递给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

如果那样做不起作用,请发布精确的代码和错误信息,以便我们查看出了什么问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接