Matlab 作为属性的对象数组
我知道如何初始化对象数组:Matlab 作为属性的对象数组,matlab,class,properties,default-value,Matlab,Class,Properties,Default Value,我知道如何初始化对象数组: 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(...)
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
我得到的异常无法从ClassA转换为double。
我知道,当未提供属性的默认值时,它会初始化为一个空的双精度数组。这解释了异常情况,但是如何设置arrayOfA
的默认值,以便用对象填充它?
我试过:
properties
arrayOfA(3,2) = ClassA;
但这会产生异常不平衡或意外的括号或括号。
编辑:我正在使用MATLAB R2015b,这会影响解决方案-请参见下文。在
arrayOfA
的属性定义中,您应该能够将其设置为:
properties
arrayOfA = ClassA.empty
end
empty
是所有非抽象类的内置方法。它会将数组初始化为ClassA
的空数组,而不是双精度的空数组。从R2016a版本开始,您可以这样:
注意没有=
符号。这将要求分配给此属性的值必须是任何大小的ClassA
从R2017a版本开始,还可以限制大小:
查看UndocumentedMatlab,了解如何限制属性的类,以及。您使用的是什么版本的MATLAB?@gnovice R2017a(64位)和R2015b(32位),在不同的情况下。@Phydeaux:我认为Dev iL上面提到的和下面提到的更新的类行为是在2016年的某个时候引入的,但我不完全确定。如果是这样,它只会在你的2017个版本中使用。@ PyDeAux:……但是,下面山姆使用的答案应该在这两个方面都起作用,如果这是你需要的。虽然我认为这是最好的解决方案,但不幸的是,我已经证实它不适用于至少一个版本的Matlab,我不得不使用它。非常感谢您的回答。请注意,此方法仅指定类型,并且始终将数组初始化为大小为0x0。您可能希望初始化为不同的空大小,例如,您可能知道数组将始终有两列,在这种情况下,您可能希望将其初始化为0x2。为此,您需要使用
empty
方法,用ClassA.empty(0,2)
调用它。
classdef ClassB
properties
arrayOfA ClassA
...
end
methods
% Constructor
function b = ClassB(...)
b.arrayOfA(3, 2) = ClassA();
...
end
end
classdef ClassB
properties
arrayOfA(3, 2) ClassA
...
end
...