2012-10-17 15 views
11

मैंने खुद को बिल्टिन फ़ंक्शंस के साथ एक कस्टम क्लास इंटरफ़ेस करने का प्रयास किया है, और मैंने एक ऐसी स्थिति को एनकॉर्टर किया है जिसे मैं केवल eval के साथ हल कर सकता हूं, मुझे एक "क्लीनर" तरीका चाहिए।फंक्शन कॉलिंग वेरिएबल आउटपुट नंबर

असल में, बिल्टिन फ़ंक्शन को varargout=blabla(varargin) के रूप में परिभाषित किया गया है, मैंने varargout=blabla(varargin) के रूप में कस्टम क्लास में ओवरराइड फ़ंक्शन को परिभाषित किया है। समारोह लगता है:

function varargout=blabla(varargin) 
    varargout=blabla(function_of_varargin) 
end 

varargin के समारोह में निर्मित clas करने के लिए कस्टम वर्ग से बदल देती है।

लेकिन यह काम नहीं करता है: मूल रूप से जब बिल्टिन फ़ंक्शन को ओवर्रिड फ़ंक्शन के अंदर बुलाया जाता है, तो यह केवल एक आउटपुट पैरामीटर (varargout) देखता है, भले ही कस्टम ओवर्रिडेन फ़ंक्शन को एक से अधिक आउटपुट पैरामीटर के साथ बुलाया जाता है ।

मैं मूल रूप से इस फोन करके इसे हल:

[varargout{1},varargout{2},...,varargout{nargout}]=blabla(function_of_varargin) 

एक पाश और eval-आईएनजी साथ एलएचएस का निर्माण।

[varargout{1:nargout}] = blabla(varargin{:}) 

:

+1

देखें [मैं MATLAB फ़ंक्शंस में अंतर्निहित कैसे लोड करूं?] (Http://www.mathworks.nl/support/solutions/en/data/1-18T0R/index.html?product=ML&solution= 1-18T0R) –

उत्तर

7

आप इस की कोशिश की है?

+0

अच्छा, आप क्या जानते हैं, जब मैटलैब ज्ञान सूख जाता है, तो यह हमेशा काम करने के लिए कुछ जादू वाक्यविन्यास होता है। यह पूरी तरह से काम करता है, धन्यवाद – rienafairefr

+0

+1 अच्छा पकड़ :) यह कक्षाओं और सदस्य कार्यों तक ही सीमित नहीं है। सामान्य कार्यों के लिए भी काम करता है। – angainor

+0

@angainor: हाँ। सेल सरणी विस्तार 'varargin' और' varargout' पर लागू सेल सरणी विस्तार - इसे अक्सर अनदेखा किया जाता है। वे वास्तव में सिर्फ साधारण सेल सरणी हैं :) –