对象数组作为属性

时间:2017-11-13 18:50:13

标签: matlab class properties default-value

我知道如何初始化一个对象数组:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tr>
    <td>Product A</td>
    <td>Quantity: <input title='Qty'></td>
  </tr>
  <tr>
    <td>Product B</td>
    <td>Quantity: <input title='Qty'></td>
  </tr>
  <tr>
    <td>Product C</td>
    <td>Quantity: <input title='Qty'></td>
  </tr>
</table>

但是当我尝试这个属性时:

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

我有read当没有提供属性的默认值时,它被初始化为一个空的双精度数组。这解释了异常,但如何设置Conversion to double from ClassA is not possible.的默认值,以便我可以用对象填充它?

我试过了:

arrayOfA

但这会导致异常properties arrayOfA(3,2) = ClassA;

编辑:我使用的是MATLAB R2015b,结果影响了解决方案 - 见下文。

2 个答案:

答案 0 :(得分:3)

arrayOfA的属性定义中,您应该能够将其设置为:

properties
    arrayOfA = ClassA.empty
end

empty是所有非抽象类的内置方法,正是出于此目的。它会将数组初始化为ClassA的空数组,而不是空数组的双精度数。

答案 1 :(得分:2)

从版本R2016a开始,您可以restrict the property type这样:

classdef ClassB
properties
  arrayOfA ClassA
  ...
end
methods
  % Constructor
  function b = ClassB(...)
    b.arrayOfA(3, 2) = ClassA();
    ...
  end
end

请注意,没有=标志。这将要求分配给此属性的值必须为任意大小的ClassA类。

从版本R2017a开始,您还可以限制尺寸as per the documentation here

classdef ClassB
properties
  arrayOfA(3, 2) ClassA
  ...
end
...