How to avoid recursion in property set functions
8 次查看(过去 30 天)
显示 更早的评论
I have an application where I would like to perform some additional operations when a property of a handle class is changed. For this purpose I thought I would use a property set method. Unfortunately when I do this, and the property set function uses another of the object's methods to assign the property value, I get an infinite recursion.
The documentation for property set methods states that property set methods are not called recursively, but this doesn't seem to apply if the property set method uses another of the objects methods to assign the property.https://www.mathworks.com/help/matlab/matlab_oop/property-set-methods.html
The recursion can be avoided if all of the code leading up to the property assignment, along with the property assignment are all contained just in the property set method. This can make the property set method rather bulky though.
Is there is some way to assign the property in another of the object's methods without encountering the inifinite recursion?
Also, am I misunderstanding the documentiation, regarding the set functions not being called recursively, or is this a bug?
The behavior is illustrated in the two highly simplified examples below.
In this implementation where everything is self contained in the set.a method everything works fine
h = myclassAlt
h.a = 3
But here, where the property a is assigned indirectly set.a uses the object's method assignVal to do the acutal assignment, we get an infinite recursion (until it runs out of memory)
h = myclass
h.a = 3
0 个评论
采纳的回答
Matt J
2023-10-18
编辑:Matt J
2023-10-18
The recursion can be avoided if all of the code leading up to the property assignment, along with the property assignment are all contained just in the property set method.
Or, you can offload just the code leading up to the property assignment:
classdef myclass < handle
properties
a % property to be set using set method
end
methods
function set.a(obj,val)
% set method for property a
obj.a=obj.modifyVal(val);
end
function newval=modifyVal(obj,val)
% perform the value modification
newval = min(val,5);
end
end
end
5 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Function Creation 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!