对象数组 属性
Array of objects as property
我知道如何初始化对象数组:
arrayOfA(3,2) = ClassA();
for i = 1:3
for j = 1:2
arrayofA(i,j) = ClassA(...);
end
end
但是当我尝试这个 属性:
classdef ClassB
properties
arrayOfA;
...
end
methods
%% Constructor
function b = ClassB(...)
b.arrayOfA(3,2) = ClassA(); % Error!
...
end
end
我得到异常 Conversion to double from ClassA is not possible.
我有 read 当没有提供 属性 的默认值时,它会被初始化为一个空的双精度数组。这解释了异常,但是 如何设置 arrayOfA
的默认值以便我可以用对象填充它?
我试过:
properties
arrayOfA(3,2) = ClassA;
但这给出了例外 Unbalanced or unexpected parenthesis or bracket.
编辑: 我正在使用 MATLAB R2015b,结果影响了解决方案 - 见下文。
在 arrayOfA
的 属性 定义中,您应该可以将其设置为:
properties
arrayOfA = ClassA.empty
end
empty
是所有非抽象的内置方法类正是为了这个目的。它将数组初始化为一个 ClassA
的空数组,而不是一个空的双精度数组。
从版本 R2016a 开始,您可以 restrict the property type 像这样:
classdef ClassB
properties
arrayOfA ClassA
...
end
methods
% Constructor
function b = ClassB(...)
b.arrayOfA(3, 2) = ClassA();
...
end
end
请注意,没有 =
标志。这将要求分配给此 属性 的值必须是 class ClassA
,任何大小。
从版本R2017a开始,您还可以限制大小as per the documentation here:
classdef ClassB
properties
arrayOfA(3, 2) ClassA
...
end
...
我知道如何初始化对象数组:
arrayOfA(3,2) = ClassA();
for i = 1:3
for j = 1:2
arrayofA(i,j) = ClassA(...);
end
end
但是当我尝试这个 属性:
classdef ClassB
properties
arrayOfA;
...
end
methods
%% Constructor
function b = ClassB(...)
b.arrayOfA(3,2) = ClassA(); % Error!
...
end
end
我得到异常 Conversion to double from ClassA is not possible.
我有 read 当没有提供 属性 的默认值时,它会被初始化为一个空的双精度数组。这解释了异常,但是 如何设置 arrayOfA
的默认值以便我可以用对象填充它?
我试过:
properties
arrayOfA(3,2) = ClassA;
但这给出了例外 Unbalanced or unexpected parenthesis or bracket.
编辑: 我正在使用 MATLAB R2015b,结果影响了解决方案 - 见下文。
在 arrayOfA
的 属性 定义中,您应该可以将其设置为:
properties
arrayOfA = ClassA.empty
end
empty
是所有非抽象的内置方法类正是为了这个目的。它将数组初始化为一个 ClassA
的空数组,而不是一个空的双精度数组。
从版本 R2016a 开始,您可以 restrict the property type 像这样:
classdef ClassB
properties
arrayOfA ClassA
...
end
methods
% Constructor
function b = ClassB(...)
b.arrayOfA(3, 2) = ClassA();
...
end
end
请注意,没有 =
标志。这将要求分配给此 属性 的值必须是 class ClassA
,任何大小。
从版本R2017a开始,您还可以限制大小as per the documentation here:
classdef ClassB
properties
arrayOfA(3, 2) ClassA
...
end
...