Matlab:在另一个类中的函数内实例化句柄类

时间:2014-03-24 21:27:55

标签: function oop matlab matlab-deployment

比方说,我有两个类: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循环中的代码段似乎有效。

你知道为什么会这样吗?

1 个答案:

答案 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