比方说,我有两个类:A& B.我已将B设置为句柄类,并希望A中的属性实例化此类(即B)。
因此,我在A组做过类似的事情:
% Constructor
function a = A()
a.objB = B(); % This works fine
...
for i = 1:10
a.var(i) = B(); % This causes an error to occur
end
end
错误如下:
“使用双转换从B加倍的错误是不可能的。
如果我将a.var(i) = B();
更改为var(i) = B();
,则for循环中的代码段似乎有效。
你知道为什么会这样吗?
答案 0 :(得分:2)
您的.var
字段可能在您完成作业时初始化为双倍(可能是[]
)。使用a.var(i) = xxx
无法更改a.var
的类型。
尝试在第一次使用时重置该值。 EG
for i = 1:10
if i == 1
a.var = B(); % Overwrite the existing value
else
a.var(i) = B(); % Now append to that value
end
end
这将导致每个循环重新分配a.var
字段。预分配您的阵列将使一切变得更快。预分配的最简单方法实际上是向后循环,如下所示:
for i = 10:-1:1
if i == 10
a.var = B(); % Overwrite the existing value, allocated room for 10 elements
else
a.var(i) = B(); % Assign each element in turn, 9 through 1
end
end