Matlab 如何初始化类句柄的向量?
我有一个基于句柄的类,我需要创建一个向量。一种简单的方法是在for循环中动态构造向量,但这会导致mlint抱怨向量大小的变化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
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{:}];