필터 지우기
필터 지우기

Basic implementation of events and listeners.

조회 수: 3 (최근 30일)
markushatg
markushatg 2012년 10월 4일
I am trying to write a class with all properties depending on eachother It seems events and listeners can be used for this, but I can't get the basic implementation of these to work.
% when property a or b is altered, sum will automatically be recalculated
classdef myclass < handle
properties
a = 1;
b = 2;
sum
end
events
valuechange
end
methods
function obj = myclass()
addlistener(obj, valuechange, calc_sum(obj))
end
function obj = set.a(obj, input)
obj.a = input;
notify(obj, valuechange)
end
function obj = set.b(obj, input)
obj.b = input;
notify(obj, valuechange)
end
function calc_sum(obj)
obj.sum = obj.a + obj.b
end
end
end
an attempt to create an object returns following error:
Undefined function or variable 'valuechange'.
Error in myclass (line 18)
addlistener(obj, valuechange, calc_sum(obj))
What am I not understanding?
Thanks

채택된 답변

Daniel Shub
Daniel Shub 2012년 10월 4일
You have three minor problems and one major problem. In the addlistener and notify calls you need to make valuechange into a string 'valuechange'. You also need the callback in addlistener to be a function handle that takes two arguments:
addlistener(obj, 'valuechange', @(obj, evt)calc_sum(obj));
The major problem is that this is not the correct way to do what you are trying to do. The calc_sum callback will only be initiated when the event queue is flushed. This means that there is a period of time in which the class is in an intermediate state (i.e., obj.a+obj.b will not equal obj.sum). You should look into dependent properties. You could also have set.a and set.b call calc_sum directly.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Construct and Work with Object Arrays에 대해 자세히 알아보기

태그

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by