我有两个功能:一个用按钮创建UI,另一个用我要执行与按下按钮相同的功能。
当我用get(gcf,'children')
挖掘图形时,我找到了按钮,其回调属性如下所示:
ans =
[function_handle]
[ 1]
[ 1]
[1x6 double]
现在,据我所知,对于第一个数组元素,我应该能够执行与从UI按下按钮时执行的功能相同的功能,但是我该怎么做?我尝试了一切,但似乎没有任何效果。
答案 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 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}
)从单元格数组中获取,并将每个值作为单独的附加参数传递给函数。
答案 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
如果这不起作用,请发布确切的代码和错误消息,以便我们可以看到出现了什么问题。