2017-05-31 325 views
2

我有一个(用户定义的类的)对象数组,我想为它们调用一个方法。该方法表示几个数据通道的处理步骤,与Treir自己的对象绑定。在Matlab中调用对象数组的方法

我看到两个解决方案:

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 

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

+0

你能澄清你的问题吗? – 16per9

+0

什么不清楚?我有1xN的对象向量,我想简单地通过'objArray.step'而不是for-loops来调用方法。 – Sairus

回答

2

典型模式遵循会是这样的:

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

无需在你的问题是递归调用单个元素的方法,它怪异的if - 只是做处理直接每个元素。

+0

谢谢,它更简单!我想我应该用这种模式编写公共方法,这种模式可以为单个对象矢量化其他私有方法。尽管在get方法的情况下,这对于对象属性来说不会那么简单。 – Sairus

+0

你说得对,一个'get'方法总是在对象数组的第一个元素上被调用。但是你总是可以使用'values = [objArray.value]':这将为对象数组的每个元素调用get方法,获得属性'value',并将它们收集到一个数组中。 –

+0

是的,我也想保持对象向量的原始维度,并添加'out = reshape(out,size(objArray));' – Sairus