我知道如何初始化一个对象数组:
<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,结果影响了解决方案 - 见下文。
答案 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
...