2017-09-15 27 views
5

मैं एक मैटलैब स्क्रिप्ट लिख रहा हूं जहां मेरे पास एक ही आत्म परिभाषित वर्ग की वस्तुओं का समूह है, A, B और C कहें। तब मेरे पास एक ऐसा फ़ंक्शन है जो 2 ऑब्जेक्ट्स पर काम करता है, जैसे func(A,B)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 अद्यतन किया जाता है, AllObjs में A अपडेट प्राप्त नहीं करता है। तो अगले लूप के लिए मुझे सभी ऑब्जेक्ट्स की एक नई सरणी बनाना है। यह इस सरल उदाहरण में करने योग्य है लेकिन ऑब्जेक्ट्स कहीं और अपडेट होने पर प्रबंधनीय नहीं है। तो मैं सभी वस्तुओं को पॉइंटर्स की एक सरणी रखना चाहता हूं। मेरी Google खोज मुझे बताती है कि मैटलैब में कोई सूचक नहीं है, लेकिन क्या मैं यहां क्या करना चाहता हूं, हासिल करने का कोई तरीका है?

उत्तर

4

मुझे संदेह है (आपके कोड को देखे बिना यह मुश्किल है) आपकी कक्षाएं ए, बी & सी हैंडल से प्राप्त नहीं होती है।

नीचे दिए गए उदाहरण लें:

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

मैटलैब दस्तावेज़ों में बहुत कुछ है और https://stackoverflow.com/q/6436539/4196396 देखें – matlabgui

संबंधित मुद्दे