对象数组 属性

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
...