Matlab类方法错误

时间:2012-01-23 05:35:43

标签: matlab constructor

我是matlab类的新手,刚刚完成了几个教程,现在我正在尝试制作一个。然而,在我的方法部分,我遇到了我一直在努力做的事情。该对象应该只需要一条信息来构造剩余的属性,我将它作为输入传递给构造函数。我当时认为我应该能够在方法部分调用另外两个函数来填充剩余的属性...请参阅下面的伪代码...

methods
    function obj=myConstructor(input)
        obj.property1=input;
        getProperty2(obj);
        getProperty3(obj);
    end

    function getProperty2(obj)
        obj.property2 = do something and save in property2...
    end

    function getProperty3(obj)
        obj.property3 = do something and save in property3...
    end

end

但是,当我尝试运行它时,属性2或3都没有分配...只传递给构造函数的值。任何有关如何完成初始化的帮助/想法将非常感激。感谢。

1 个答案:

答案 0 :(得分:3)

首先,get方法通常用于检索(即获取)对象属性的值。不要计算一些东西。

接下来,MATLAB对象模型有两种不同的类型:值对象和句柄对象。区别很重要,但由于您没有提及任何,我将假设您正在使用值对象。句柄对象的行为完全不同。

与例如Java和大多数其他语言,您需要返回更改的对象。所以在MATLAB中,这将是:

classdef MyClass
    properties
        p1, p2, p3;
    end
    methods
       function obj = MyClass(input)
          obj.p1 = input;
          obj = obj.calculateP2(input);
          obj = obj.calculateP3(input);
       end
       function obj = calculateP2(obj, input)
          obj.p2 = someLengthyCalculation(input);
       end
       function obj = calculateP3(obj, input)
          obj.p3 = someOtherLengthyCalculation(input);
       end
    end
end

这可以变得更加干净,因为calculateP?方法很可能更适合作为私有静态方法。这一切都取决于你想传递给这些方法的程度。