2017-09-15 97 views
5

Aynı kendinden tanımlı bir sınıfa sahip bir grup nesneye sahip olduğum bir Matlab komut dosyası yazıyorum, A, B ve C. Sonra, func(A,B) gibi 2 nesneden herhangi birinde çalışan bir işlevim var.Matlab'daki nesneler için bir dizi işaretçi nasıl oluşturulur?

Şimdi bir nesne seçmek istiyorum, A ve func(A,x) tüm diğer nesneler aracılığıyla. Elbette kendini hariç ederken

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

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

... 

Yani, ben üzerinden döngü geleni nesneleri dizisini oluşturmak gerekir: Yani temelde gibi bir şey başarmak. Hücre dizisi ile yapmak istedi, ben de var: A güncellendiğinde

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

Ancak, güncelleştirmeleri almaz AllObjs içinde A. Yani bir sonraki döngü için tüm nesnelerin yeni bir dizisini oluşturmak zorundayım. Bu basit örnekte yapılabilir, ancak nesneler başka bir yerde güncellendiğinde yönetilemez. Bu yüzden tüm nesneler için bir dizi işaretçiye sahip olmak istiyorum. Google aramam, bana Matlab'da işaretçi olmadığını söylüyor, ancak burada yapmak istediğim şeyi elde etmenin bir yolu var mı?

cevap

4

A, B & C sınıflarınızın sizin kodunuzdan devralmadığından şüpheleniyorum (kodunuzu görmeden zorluğu).

aşağıdaki örneklere atın:

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. 

yapmanız Ancak eğer:

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

Sonra yapın:

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

yok benim sınıf 'handle' yoktur. Ne yaptığıyla ilgili herhangi bir belge var mı? – LWZ

+1

Matlab belgelerinde çok şey var ve bkz. Https://stackoverflow.com/q/6436539/4196396 – matlabgui