Setter methods for dynamic properties
1 次查看(过去 30 天)
显示 更早的评论
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
采纳的回答
Daniel Shub
2012-9-19
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
更多回答(1 个)
Sebastian Hölz
2025-6-18
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 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!