Setter methods for dynamic properties
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Andrew Barton
am 18 Sep. 2012
Beantwortet: Sebastian Hölz
am 18 Jun. 2025
Hello,
I have been working with a class that has dynamic properties that I would like to have setter methods for. The problem is that I don't know how many or the names of the dynamic properties, so I want to have just one setter that takes the name of the property as an argument. However this breaks the part of MATLAB that determines whether or not you're in a setter function (so that when you set the variable it just sets the variable, instead of calling the setter recursively). Here's some example code that illustrates what I'm talking about:
classdef myClass < dynamicprops
methods
function obj = myClass()
P = addprop(obj, 'myProp');
P.SetMethod = @(o,p)SetProp(o,'myProp',p);
end
function SetProp(obj, propname, val)
obj.(propname) = val;
end
end
end
Now if you try:
x = myClass();
x.myProp = 7;
the method SetProp gets called recursively until MATLAB throws an error. Is there another way to go about this that I am missing? Thanks in advance.
-Andrew
3 Kommentare
Akzeptierte Antwort
Daniel Shub
am 19 Sep. 2012
What about overloading subsasgn
classdef myClass < dynamicprops
methods
function obj = myClass()
P = addprop(obj, 'myProp');
end
function A = subsasgn(A, S, B)
switch S.type
case '.'
SetProp(A, S.subs, B);
end
end
function SetProp(obj, propname, val)
obj.(propname) = val;
end
end
end
2 Kommentare
Weitere Antworten (1)
Sebastian Hölz
am 18 Jun. 2025
I believe the best method is to temporarily disable the property set method in the defined setter-method:
classdef myClass < dynamicprops
methods
function obj = myClass()
prop_name = 'myProp'
P = addprop(obj, prop_name);
prop.SetMethod = @(obj, val)SetProp(obj, prop_name, val, P);
end
function SetProp(obj, prop_name, val, P)
% disable setter-method
tmp = P.SetMethod;
P.SetMethod = [];
% Set value, this could include some more error checking ...
obj.(prop_name) = val;
% Reset setter-method
P.SetMethod = tmp;
end
end
end
0 Kommentare
Siehe auch
Kategorien
Mehr zu Functions finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!