2017-09-15 10 views
5

私は同じ自己定義クラスのオブジェクトがたくさんあるMatlabスクリプトを書いています。例えば、ABCです。次に、私はfunc(A,B)のような2つのオブジェクトのいずれかで動作する関数を持っています。Matlabのオブジェクトへのポインタの配列を作成するには?

ここでは、他のすべてのオブジェクトを通じてA、次にfunc(A,x)などのオブジェクトを選択します。したがって、基本的には次のようにしてください:

func(A,B) 
func(A,C) 
A.update() 

func(B,A) 
func(B,C) 
B.update() 

... 

私はループすることができるすべてのオブジェクトの配列を作成する必要があります。私は、セル配列でそれを実行しようとしましたので、私は持っている:

AllObjs = {A,B,C} 
for i=1:length(AllObjs) 
    if ~isequal(A, AllObjs{i}) 
    func(A, AllObjs{i}) 
    end 
end 
A.update() 

しかし、Aが更新されたとき、AllObjsAが更新を取得していません。ですから、次のループでは、すべてのオブジェクトの新しい配列を作成する必要があります。この単純な例では実行可能ですが、オブジェクトが別の場所で更新された場合は管理できません。だから私はすべてのオブジェクトへのポインタの配列を持っていると思います。私のGoogle検索ではMatlabにポインタがないと言われますが、ここで何をしたいのかを達成する方法がありますか?

答えて

4

あなたのクラスA、B & Cはハンドルから継承していないと思われます。

次の例ください:あなたが行う場合は

classdef noHandle 
    properties 
    name = ''; 
    end 
    methods 
    function obj = noHandle (name) 
     obj.name = name; 
    end 
    end 
end 

A = noHandle ('A'); 
B = noHandle ('B'); 
C = noHandle ('C'); 
allObjs = { A B C } 
allObjs{1}.name % check its name is "A" 
% change the name of A 
A.name = 'AAA' 
allObjs{1}.name % see that allObjs{1} is still A. 

を:

classdef fromHandle < handle 
    properties 
    name = ''; 
    end 
    methods 
    function obj = fromHandle (name) 
     obj.name = name; 
    end 
    end 
end 

を次に実行します。

A = fromHandle ('A'); 
B = fromHandle ('B'); 
C = fromHandle ('C'); 
allObjs = { A B C } 
allObjs{1}.name % check its name is "A" 
% change the name of A 
A.name = 'AAA' 
allObjs{1}.name % see that allObjs{1} is updated to AAA. 
+0

を何私のクラスは 'handle'がありません。それは何のことについてのドキュメントがありますか? – LWZ

+1

matlab docsにはたくさんあり、https://stackoverflow.com/q/6436539/4196396を参照してください。 – matlabgui

関連する問題