如果我运行此代码来创建一个简单的类:
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中的类中没有调用构造函数。
答案 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
亲切的问候,