当我尝试将类属性分配给属性块中的另一个类属性时,为什么MATLAB会抛出“未定义的变量”错误?

时间:2013-11-22 21:35:18

标签: matlab matlab-class

如果我运行此代码来创建一个简单的类:

classdef myclass
    properties
        m = 2;
        n = m + 2;
    end
end

我收到错误:

Undefined function or variable 'm'.
Error in myclass (line 1)
classdef myclass 

这是为什么?我在这个最小的例子中省略了构造函数,因为a)如果我把构造函数放入,错误仍然会发生,并且b)我在单元测试类中遇到了这个错误,并且在MATLAB 2013b中的类中没有调用构造函数。

3 个答案:

答案 0 :(得分:5)

this page上有一条可能解释问题的说明:

  

注意:仅在首次需要该值时才会对属性默认值进行评估,而在MATLAB首次初始化该类时仅进行一次。每次创建类实例时,MATLAB都不会重新评估表达式。

我认为这意味着当您创建一个类实例时,m尚未初始化,因此您无法使用它来设置另一个属性n的默认值。

我能让它工作的唯一方法是将m声明为Constant属性:

classdef myclass
    properties (Constant = true)
       m=2; 
    end
    properties
        n = myclass.m + 2;
    end
end

但如果你想改变m,那可能没什么帮助。

答案 1 :(得分:1)

您还可以将初始化移动到构造函数:

classdef myclass
    properties
        m = 2;
        n;
    end
    methods
        function obj = myclass(obj)
            obj.n = obj.m + 2;
        end
    end
end

答案 2 :(得分:-2)

MATLAB将属性定义为classname.propertyname。因此,如果您将代码更改为以下代码,它应该可以正常工作。

classdef myclass
    properties
        m = 2;
        n = myclass.m + 2;
    end
end

亲切的问候,