2012-05-09 60 views
3

假设我有一个带有方法SetProperty的句柄类的1x2对象数组。我可以使用arrayfun为每个类调用SetProperty方法,以及它用于设置属性值的向量吗?Matlab Arrayfun with Handle Class

回答

1

是的,你可以:

arrayfun(@(x,y)x.SetProperty(y), yourHandleObjects, theValues) 
+0

谢谢!这很简单,我不知道为什么我在语法上遇到了很多麻烦。 – krapht

3

你也可以设计类,以便调用SetProperty将矢量:

class Foo < handle 
     methods(Access=public) 
      function SetProperty(this,val) 
       assert(numel(this)==numel(val)); 
       for i=1:numel(this) 
         this(i).prop = val(i); 
       end 
      end 
     end 
end 

然后,您可以创建一个向量并调用该方法直接在它上面:

f = repmat(Foo(),[1 2]); 
    f.SetProperty([5 3]); 
+0

我以前也用过这个。尽管如此,我更愿意使用arrayfun,因为我可以控制传递给函数的内容。当我有一堆嵌套类时,这是一个问题,我从来不知道自己是否会引用我想要的类或其超类,这取决于我称之为方法的地方。 – krapht

+0

@AndrewAshworth你在说什么听起来很有趣。你能给个例子吗? (为了我自己的教育目的) –