假设我们有一个类;道具";作为财产和";depProp";是";从属的";所有物此外,它将具有getter函数来计算";depProp";。类定义如下:
classdef Program
properties
prop = 200;
end
properties (Dependent)
depProp
end
methods
function val = get.depProp(obj)
val = prop*rand;
if val>100
obj.prop = 100; % gives an error
end
end
end
end
然而,MATLAB给出了一个错误,因为get.depProp函数不返回"0";obj";作为输出,因此它不能更改对象的属性。我知道为什么会发生这种情况(它是值类,必须返回对象(。我不想切换到处理类。那么,如何在因变量的getter函数中更改对象的属性呢。低效的解决方案也是受欢迎的。提前谢谢你,
要设置属性的值,您需要一个setter函数,请参阅文档。
classdef Program
properties
prop = 200;
end
properties (Dependent)
depProp
end
methods
function val = get.depProp(obj)
val = obj.prop * rand;
end
function obj = set.depProp(obj, val)
if val > 100
obj.prop = 100;
end
end
end
end
但看起来您要做的是在获取其值的同时更改对象。我认为做这件事的唯一方法是使用句柄类。如果没有句柄类,更改对象的唯一方法就是从函数中返回对象。您需要像[obj, val] = obj.depProp
这样的语法。
使用句柄类,它可能看起来像这样。请注意,您不需要依赖属性,一个正则函数就足够了:
classdef Program < handle
properties
prop = 200;
end
methods
function val = depProp(obj)
val = obj.prop * rand;
if val > 100
obj.prop = 100;
end
end
end
end
现在你可以做:
obj = Program;
obj.depProp
obj.depProp