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

Mic*_*l A 3 matlab matlab-class

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

classdef myclass
    properties
        m = 2;
        n = m + 2;
    end
end
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

Undefined function or variable 'm'.
Error in myclass (line 1)
classdef myclass 
Run Code Online (Sandbox Code Playgroud)

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

cha*_*pjc 5

此页面上有一条说明可以解释问题:

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

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

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

classdef myclass
    properties (Constant = true)
       m=2; 
    end
    properties
        n = myclass.m + 2;
    end
end
Run Code Online (Sandbox Code Playgroud)

但如果你想改变,那可能没有用m.