2012-01-18 16 views
5

मेरे पास कक्षा Foo है और एक ऐसा फ़ंक्शन जो इनपुट पैरामीटर के रूप में Foo प्राप्त करता है। इस समारोह में मैं भी isa का उपयोग कर कुछ त्रुटि जाँच करें:मैं matlab में एक शून्य संदर्भ कैसे पारित कर सकता हूं ताकि आईएसए सच हो जाए?

function (x) 
    if ~isa(x,'Foo') 
    error('Wrong!'); 
    end 

मैं यह कुछ है कि जावा में अशक्त की तरह है पारित करने के लिए चाहते हैं। हालांकि जब मैं इसे [] पास करता हूं तो मुझे एक त्रुटि मिलती है। क्या आप मुझे बता सकते हैं कि मैं क्या कर सकता हूं? मैं हर बार जब मैं isa का उपयोग करता हूं तो मैं हमेशा सेल सरणी पास कर रहा हूं या empty की जांच करता हूं।

उत्तर

9

सबसे पहले, आप

validParam = isa(x,'Foo') || isempty(x); 

हालांकि साथ हमारे स्थिति की जांच कर सकते हैं, सबसे अच्छा तरीका स्थिर विधि empty का उपयोग कर एक खाली वर्ग बनाने के लिए किया जाएगा:

e = Foo.empty(0); 
    isa(x,'Foo') 

और परिणाम है :

इसा (Foo.empty (0), 'फू')

ans =

1 

वैसे, यह भी एक अन्य मामले के लिए उपयोगी है - मान लीजिए आप गतिशील रूप से विकसित करने के लिए करना चाहते हैं और Foo ऑब्जेक्ट की श्रेणी। आप एक सेल सरणी का उपयोग कर सकते हैं, लेकिन फिर आप प्रकार की सुरक्षा खो देते हैं। इसके बजाय, Foo.empty() बनाएं।

फिर भी, इस विधि का उपयोग करने में एक चेतावनी है। यह विरासत को संभालने के लिए पर्याप्त स्मार्ट नहीं है -

BarFoo से प्राप्त होने वाली कक्षा बनें।

classdef Bar < Foo 

end 

और तुम Foo वस्तुओं की एक नई सरणी का आवंटन: कोई गुणों के साथ

x = Foo.empty(0) 

एक्स =

0x0 खाली फू।
तरीके

फिर Bar जोड़ने का प्रयास:

x(end+1) = Bar() 

??? निम्न त्रुटि बार से Foo में परिवर्तित हो गई: ==> Foo का उपयोग करने में त्रुटि बहुत सारे इनपुट तर्क।

तो इस मामले के लिए एकमात्र कामकाज सेल सरणी का उपयोग करना है।


संपादित करें (1): ऐसा लगता है कि Matlab आदेश विरासत को संभालने के लिए एक special class जोड़ लिया है: एक अमूर्त वर्ग में प्रावधान है कि है

विवरण

matlab.mixin.Heterogeneous विषम सरणी के गठन के लिए का समर्थन करें। एक विषम सरणी ऑब्जेक्ट्स की सरणी है जो उनके विशिष्ट वर्ग में भिन्न होती है, लेकिन सभी रूट क्लास के व्युत्पन्न या उदाहरण हैं। मूल वर्ग सीधे matlab.mixin से प्राप्त होता है। विषम।

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

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