3

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

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 中的此类类中未调用构造函数。

4

3 回答 3

5

此页面上有一条注释可能会解释该问题:

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

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

我可以让它工作的唯一方法是如果我声明m为一个常量属性:

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

但是,如果您想更改,这可能无济于事m

于 2013-11-22T21:51:53.390 回答
1

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

classdef myclass
    properties
        m = 2;
        n;
    end
    methods
        function obj = myclass(obj)
            obj.n = obj.m + 2;
        end
    end
end
于 2015-09-02T22:35:14.537 回答
-2

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

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

亲切的问候,

于 2013-11-22T21:53:34.130 回答