callback within the class?

7 visualizaciones (últimos 30 días)
jeff wu
jeff wu el 13 de Mzo. de 2012
hi, i got the following class:
classdef form<handle
properties
type = 'square'
b
h
A
Iy
Iz
Wy
Wz
end %properties
events
calc
end %events
methods
function f = form(b,h)
f.b=b;
f.h=h;
f.update()
end
function obj = update(obj)
obj.A= obj.h*obj.b;
obj.Iy= obj.h^3*obj.b/12;
obj.Iz= obj.b^3*obj.h/12;
obj.Wy= obj.h^2*obj.b/6;
obj.Wz= obj.b^2*obj.h/6;
end
end % events
end%class
how do i manage to call the function update everytime when either form.a or form.h of an instance is changed withoud adding a listener to the instance? is there a way to directly built thin in the class definition?
thanks a lot for help

Respuesta aceptada

Daniel Shub
Daniel Shub el 14 de Mzo. de 2012
It seems like all the properties other than b and h should be dependent. This would allow you to get rid of the update method. If you really want to go the update route, you could write a set method for b and h which will call the update method.
Does the following work for you?
classdef form<handle
properties
type = 'square'
b
h
end
properties (Dependent)
A
Iy
Iz
Wy
Wz
end %properties
methods
function f = form(b,h)
f.b=b;
f.h=h;
end
function val = get.A(obj)
val= obj.h*obj.b;
end
function val = get.Iy(obj)
val= obj.h^3*obj.b/12;
end
function val = get.Iz(obj)
val= obj.b^3*obj.h/12;
end
function val = get.Wy(obj)
val= obj.h^2*obj.b/6;
end
function val = get.Wz(obj)
val = obj.b^2*obj.h/6;
end
end % events
end%class
You could also go with the "ugly" update method:
classdef form<handle
properties
type = 'square'
b
h
A
Iy
Iz
Wy
Wz
end %properties
methods
function f = form(b,h)
f.b=b;
f.h=h;
end
function set.b(obj, val)
obj.b = val;
obj.update;
end
function set.h(obj, val)
obj.h = val;
obj.update;
end
function obj = update(obj)
obj.A= obj.h*obj.b;
obj.Iy= obj.h^3*obj.b/12;
obj.Iz= obj.b^3*obj.h/12;
obj.Wy= obj.h^2*obj.b/6;
obj.Wz= obj.b^2*obj.h/6;
end
end % events
end%class

Más respuestas (1)

Walter Roberson
Walter Roberson el 14 de Mzo. de 2012
You do not appear to have a form.a . You do have a form.A which is overwritten in update() . If update() is to be called as a callback when form.A is changed, then it would be called when form.A is changed within update()
What is the point of having an update when form.A is changed, if the value of form.A is going to be ignored?
Is it perhaps form.b you wish to trigger update() on?
  1 comentario
jeff wu
jeff wu el 14 de Mzo. de 2012
yes sorry, when form.h and form.b are changed the update shall be lunshed again

Iniciar sesión para comentar.

Categorías

Más información sobre Properties en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by