2012-05-09 2 views
3

私はSetPropertyメソッドを持つハンドルクラスの1x2オブジェクト配列を持っていると言います。 arrayfunを使用して、クラスごとにSetPropertyメソッドを呼び出すことができます。また、プロパティ値を設定するためのベクトルも使用できますか?ハンドルクラスのMatlab Arrayfoon

答えて

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あなたが言っていることは面白いと思う。あなたは例を挙げることができますか? (自分の教育目的のために) –