问题描述
假设我们有一个类,其属性为“ prop”,而“ depProp”为“ Dependent”属性。此外,它将具有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
但是,由于get.depProp函数未将“ obj”作为输出返回,因此MATLAB发生错误,因此它无法更改对象的属性。我知道为什么会发生(这是值类,必须返回对象)。我不想切换到处理类。因此,如何在因变量的getter函数中更改对象的属性。也欢迎低效的解决方案。 预先谢谢你,
解决方法
要设置属性的值,您需要使用setter函数,请参见the documentation。
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
但是您似乎想要做的就是在获取对象值的同时更改对象 。我认为做这种事情的唯一方法是使用handle类。没有句柄类,更改对象的唯一方法是从函数中返回对象。您需要使用[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