У меня есть проблема для определения аргументов обратных вызовов и то, что говорит matlab documentation, не помогает мне.Вызов одного метода из другого метода и аргументов обратного вызова
Мой первый класс:
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
Мой второй класс:
classdef second < handle
methods
function obj = answerer(obj_first,obj_third)
addlistener(obj_first,'Contact',@obj.handleEvnt);
end
function handleEvnt(obj,obj_first,~,obj_third,~)
if obj_first.State
obj_third.tracker()
end
end
end
end
Мой третий класс:
classdef third < handle
methods
function tracker(obj)
%computations
end
end
end
Здесь ошибка я получаю:
>> o_first=first;
o_third=third;
o_second=second(o_first,o_third);
>> o_first.follower
Warning: Error occurred while executing callback:
Undefined variable obj_third.
Error in second/handleEvnt (line 9)
obj_third.tracker()
Error in second>@(varargin)obj.handleEvnt(varargin{:}) (line 4)
addlistener(obj_first,'Contact',@obj.handleEvnt);
Error in first/OnStateChange (line 12)
notify(obj,'Contact');
Error in first/follower (line 19)
obj.OnStateChange(true)
> In first>first.OnStateChange at 12
In first>first.follower at 19
Не могли бы Вы помочь мне?
Большое спасибо
Прочтите документацию. Я рассказывал вам это несколько раз, но кажется, что вы этого не сделали. Вам особенно нужно прочитать об [анонимных функциях] (http://www.mathworks.com/help/matlab/matlab_prog/anonymous-functions.html) – Suever
Проблема в том, что ваша анонимная функция '@ obj.handleEvnt' и ваша функция definition 'handleEvnt (obj, obj_first, ~, obj_third, ~)' * не совпадают. Ваша анонимная функция только передает * три * входа в 'handleEvnt' и' handleEvnt' ожидает 5. – Suever
Где определено здесь число входов, которое анонимная функция @ obj.handleEvnt проходит? –