Matlab 从另一个方法调用一个方法和回调参数
我在定义回调参数时遇到了问题,所说的对我没有帮助 我的第一节课:Matlab 从另一个方法调用一个方法和回调参数,matlab,oop,events,callback,listener,Matlab,Oop,Events,Callback,Listener,我在定义回调参数时遇到了问题,所说的对我没有帮助 我的第一节课: classdef first < handle properties State = false end events Contact end methods function OnStateChange(obj,newState) if newState ~= obj.State obj.State = newSt
classdef first < handle
properties
State = false
end
events
Contact
end
methods
function OnStateChange(obj,newState)
if newState ~= obj.State
obj.State = newState;
notify(obj,'Contact');
end
end
function follower(obj)
while 1
data=inputSingleScan(sessions_daq.NI_USB_1);
if data>3
obj.OnStateChange(true)
else
obj.OnStateChange(false)
end
end
end
end
end
你能帮帮我吗
非常感谢您问题在于您如何将您的定义为对
addlistener
的回调。触发事件时。这些投入是:
addlistener
提供的
实际上,您定义的回调是
@(src, evnt)obj.handleEvnt(src, evnt)
因此,如果您查看方法second.handleEvnt
的函数定义,您将看到您编写的函数需要五个输入
出现错误的直接原因是obj_third
,最后一个输入没有通过您提供的回调传递给此函数(因为我们说过它只传递三个输入)
要解决这个问题,您可以重新编写handleEvnt
方法,只接受三个输入
function handleEvnt(obj, src, evnt)
或者,您可以重写匿名函数,将其他函数传递给回调函数
@(src,evnt)obj.handleEvnt(src, evnt, other, arguments)
除了这里介绍的使用匿名函数的方法外,您还可以使用MATLAB允许的任何定义方法。请阅读文档。我已经告诉过你好几次了,但你似乎还没有。您尤其需要了解的是,您的匿名函数
@obj.handleEvnt
和您的函数定义handleEvnt(obj,obj_第一,~,obj_第三,~)不匹配。您的匿名函数只向handleEvnt
传递三个输入,而handleEvnt
预期为5。此处定义了匿名函数@obj.handleEvnt传递的输入数?所有addlistener
回调默认传递两个输入参数(源数据和事件数据),然后,由于您将其称为obj.handleEvnt
,因此添加当前对象作为第一个输入。所以本质上你的匿名函数看起来是这样的:@(src,evnt)obj.handleEvnt(src,evnt)
。如果您想传递其他参数,您需要这样做:@(src,evnt)obj.handleEvnt(src,evnt,other,arguments)
.PS-您是否理解为什么在addlistener中,回调函数必须定义为匿名函数(可以在下面的“程序文件”中定义)?
@(src, evnt)obj.handleEvnt(src, evnt)
function handleEvnt(obj,obj_first,~,obj_third,~)
function handleEvnt(obj, src, evnt)
@(src,evnt)obj.handleEvnt(src, evnt, other, arguments)