如何在 MATLAB 中因变量的 getter 函数中更改对象的属性?



假设我们有一个类;道具";作为财产和";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

相关内容

  • 没有找到相关文章