作为主题,我试图发送句柄,以便匿名函数可以与GUI的其余部分进行交互。但是,当查看匿名函数中的输入时,它们会变空。
这里将功能添加到GUI:
x=5;
y=3;
z=4;
set(gca,'ButtonDownFcn', @(y,z,x)mousecontroll_callback)
内部函数会对你点击的内容做出反应,但它无法读取y,z或x
function mousecontroll_callback(y,z,x)
...
运行此GUI时出现此错误消息,它是从另一个名为otherGUI的GUI调用的 “使用screenmode> screenmode_OutputFcn时出错 输入参数太多。
gui_mainfcn出错(第265行) feval(gui_State.gui_OutputFcn,gui_hFigure,[], gui_Handles);
screenmode出错(第42行) gui_mainfcn(gui_State,varargin {:});
otherGUI>全屏错误(第1031行) screenmode(图像,范围); 评估uimenu回调时出错“ - 但是当没有弄乱匿名函数的输入并试图让他们知道代码运行时。
我不想再使用全局变量,任何人都知道如何获取此函数来获取x,y,z,以后将成为句柄?
答案 0 :(得分:0)
试试这个:
set(gca,'ButtonDownFcn', { @mousecontroll_callback , x,y,z} );
...
function mousecontroll_callback(hObj,evt,x,y,z)
end
{}
语法让Matlab知道您想传递其他变量。
请注意,x
,y
和z
值将作为closure上下文的一部分被冻结,即使您更新它们也会相同。如果你想这样做,你需要找到另一个解决方案,例如:
guidata
全局数据存储来传输结构(像指南一样) - 最受欢迎的解决方案。handle
对象,该对象将传递给所有函数答案 1 :(得分:0)
您的代码中存在错误,这意味着它没有按您的想法执行。
x=5;
y=3;
z=4;
set(gca,'ButtonDownFcn', @(y,z,x)mousecontroll_callback)
如果您有上述代码,我猜您希望在按下按钮时执行以下命令:
mousecontroll_callback(3,4,5);
实际上,通过将参数放在@
符号后面,您实际上创建了一个包装函数,如下所示(baz
)
x=5;
y=3;
z=4;
set(gca,'ButtonDownFcn', @baz)
function foo = baz(b,c,a)
mousecontroll_callback
end
如果您使用以下内容,它应该按预期工作:
set(gca,'ButtonDownFcn', @() mousecontroll_callback(y,z,x));