【问题标题】:Call method for object arrays in MatlabMatlab中对象数组的调用方法
【发布时间】:2017-11-01 01:03:06
【问题描述】:

我有一个对象数组(属于用户定义的类),我想为所有对象调用一个方法。该方法表示与三个自己的对象相关联的几个数据通道的处理步骤。

我看到了两种解决方案:

1) 编写一个for循环来为向量中的每个对象调用方法:

for i=1:numel(objArray)
    objArray(i).step;
end

2) 在类方法中添加长度检查,如下所示:

function step(obj) 
    if numel(obj)>1
        for i=1:numel(obj)
            step(obj(i));
        end
        return;
    end
    % some processing ...
end

但是我不喜欢这两种解决方案,因为我应该在第一种情况下为每个方法调用添加相同的代码,或者在第二种情况下为每个方法定义添加相同的代码。 有没有更好的方法?

【问题讨论】:

  • 你能澄清你的问题吗?
  • 有什么不清楚的地方?我有 1xN 对象向量,我想简单地通过 objArray.step 而不是 for 循环来调用方法。

标签: arrays matlab oop vectorization


【解决方案1】:

要遵循的典型模式如下:

function step(objArray)
    for i = 1:numel(objArray)
        % some processing on objArray(i)
    end
end

在您的问题中不需要那个奇怪的if 递归调用单个元素上的方法 - 只需直接对每个元素进行处理即可。

【讨论】:

  • 谢谢,简单多了!我认为我应该使用这种模式编写公共方法,将其他私有方法矢量化为单个对象。尽管在 get 方法的情况下,这对于对象属性不会那么简单。
  • 你说得对,总是在对象数组的第一个元素上调用 get 方法。但是你总是可以使用values = [objArray.value]:这将为对象数组的每个元素调用get方法,获取属性value,并将它们收集到一个数组中。
  • 是的,我也认为保持对象向量的原始尺寸并添加out = reshape(out, size(objArray));
猜你喜欢
  • 2012-05-20
  • 1970-01-01
  • 2017-10-24
  • 2018-10-21
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
  • 2010-10-17
  • 2015-02-12
相关资源
最近更新 更多