Matlab 如何初始化类句柄的向量?

Matlab 如何初始化类句柄的向量?,matlab,object,vector,handle,Matlab,Object,Vector,Handle,我有一个基于句柄的类,我需要创建一个向量。一种简单的方法是在for循环中动态构造向量,但这会导致mlint抱怨向量大小的变化 classdef HandleClass < handle ... end ... for i = 1:10 foo(i) = HandleClass(); end 似乎可以通过调用所有非抽象类中存在的方法来实现这一点 foo = HandleClass.empty(10,0); for i = 1:10 foo(i) = Handle

我有一个基于句柄的类,我需要创建一个向量。一种简单的方法是在for循环中动态构造向量,但这会导致mlint抱怨向量大小的变化

classdef HandleClass < handle
    ...
end

...

for i = 1:10
    foo(i) = HandleClass();
end

似乎可以通过调用所有非抽象类中存在的方法来实现这一点

foo = HandleClass.empty(10,0);
for i = 1:10
    foo(i) = HandleClass();
end
这将默认填充foo(1)到foo(9)


请注意,只有当HandleClass的构造函数在没有输入参数的情况下工作时(也就是说,它可以是默认构造的)。

使用默认构造函数可以接受答案。没有默认构造函数(
HandleClass()
)返回的输入参数不足)我认为最好的方法是先创建一个单元格:

foo=cell(1,10);
for ix=1:10
    foo{ix}=HandleClass(ix)
end;
foo=[foo{:}];

这会抱怨转换错误:无法从HandleClass转换为double。@RyanEdwards更新了解决方案。这会关闭M-Lint,但实际上不会预分配任何内容。尝试将10000个元素的空数组放入一个变量中,并查看whos输出中该变量的字节列;大约是100字节。此外,尝试将此与我的解决方案进行比较(示例代码位于)。我用我的技术得到了60倍的加速。谢谢你做了额外的调查,@SCFrench。我已经更改了我接受的答案以反映。谢谢。虽然我更喜欢@Praetorian的解决方案,因为它允许我使用非默认构造函数。使用此方法时,请注意,这实际上调用构造函数来初始化
foo(1)
foo(9)
。只有在没有副作用的情况下才可使用。可能重复
foo(10) = HandleClass();
foo=cell(1,10);
for ix=1:10
    foo{ix}=HandleClass(ix)
end;
foo=[foo{:}];