【问题标题】:Matlab: Instantiate the handle class inside a function within another classMatlab:在另一个类中的函数内实例化句柄类
【发布时间】:2014-03-24 21:27:55
【问题描述】:

假设,例如,我有两个类: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

错误如下:

“使用 double 无法从 B 转换为 double 时出错。

如果我将a.var(i) = B(); 更改为var(i) = B();,for 循环中的代码 sn-p 似乎可以工作。

你知道这是为什么吗?

【问题讨论】:

    标签: function oop matlab matlab-deployment


    【解决方案1】:

    当您进行分配时,您的.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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多