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

时间:2009-11-30 11:19:44

标签: matlab callback

我有两个功能:一个用按钮创建UI,另一个用我要执行与按下按钮相同的功能。

当我用get(gcf,'children')挖掘图形时,我找到了按钮,其回调属性如下所示:

ans = 
    [function_handle]
    [              1]
    [              1]
    [1x6 double]

现在,据我所知,对于第一个数组元素,我应该能够执行与从UI按下按钮时执行的功能相同的功能,但是我该怎么做?我尝试了一切,但似乎没有任何效果。

2 个答案:

答案 0 :(得分:3)

从按钮回调的结果来看,回调是按照以下方式创建的(仅举例):

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 listhObject(调用回调的对象的句柄)和eventdata(事件数据的结构)。

如果要使用应传递给它的3个附加参数(11和1乘6的数组)调用函数句柄,您还需要传递hObjecteventdata输入的参数。以下是调用函数的方式(使用变量ans):

ans{1}(hButton,[],ans{2:end});

首先从单元格数组(ans{1})获取函数句柄,然后call it using parentheses as you would any other function。对于hObject,您可以将句柄传递给uicontrol对象(如果不需要,则为空值),对于eventdata,您只需传递一个空值。然后,将附加值作为comma-separated listans{2:end})从单元格数组中获取,并将每个值作为单独的附加参数传递给函数。

答案 1 :(得分: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

如果这不起作用,请发布确切的代码和错误消息,以便我们可以看到出现了什么问题。