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

问题描述

假设我们有一个类,其属性为“ 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