2011-12-21 10 views
31

कहें कि मेरे पास 2 तर्कों के साथ एक फ़ंक्शन, dummy है। फंक्शन कॉल में उपलब्ध नहीं होने पर तर्कों में डिफ़ॉल्ट मान हो सकते हैं। लेकिन मुझे कैसे पता चलेगा कि एक तर्क प्रदान नहीं किया जाता है?फ़ंक्शन कॉल में कोई तर्क प्रदान करने के तरीके की जांच कैसे करें?

मैं जानता हूँ कि मैं nargin उपयोग कर सकते हैं, इस

function dummy(arg1, arg2) 
if nargin < 2 
    arg2 = 0; 
end 
if nargin < 1 
    arg1 = 0; 
end 
% function body 

मैं जानना चाहता हूँ कि क्या मैं जाँच कर सकते हैं एक तर्क तर्क नाम के आधार पर आपूर्ति की है कि क्या चाहते हैं की तरह? कुछ supplied(arg2) == false की तरह कुछ।

मैं यह पूछता हूं क्योंकि, कभी-कभी मैं तर्क सूची के सामने नए तर्क जोड़ना चाहता हूं (क्योंकि इसमें डिफ़ॉल्ट मान नहीं हो सकता है), और फिर मुझे सभी if nargin ... बदलना होगा। अगर मैं नाम से जांच सकता हूं, तो कुछ भी नहीं बदला जाना चाहिए।

उत्तर

52

मैं हमेशा की तरह कार्य करें:

if ~exist('arg1','var') 
    arg1=0; 
end 

रूप @Andrey से कहा, यह समाधान आपको समारोह के तर्क की संख्या/क्रम बदल सकते हैं के साथ, कोड बदले बिना। यह nargin समाधान के साथ मामला नहीं है।

रूप @yuk से कहा, तुम तर्क आप कर सकते हैं छोड़ सकते हैं करना चाहते हैं:

if ~exist('arg1','var') || isempty(arg1) 
    arg1=arg1DefaultValue; 
end 
+1

यह nargin तुलना में काफी बेहतर है, क्योंकि आप की जरूरत नहीं है मामले में कोड बदलने के लिए आप कभी भी परिवर्तन समारोह में पैरामीटर का क्रम। –

+1

मैं आमतौर पर '... | भी जोड़ता हूं isempty (arg1) ', तो उपयोगकर्ता 'arg1' छोड़ सकता है, लेकिन' arg2' की आपूर्ति करें। बेशक अगर 'arg1' खाली नहीं हो सकता है। – yuk

+2

अपमानजनक, लेकिन मैंने सोचा कि यह वास्तव में सवाल का जवाब नहीं दे रहा था। वैसे भी, मैंने जवाब संपादित किया, मुझे लगता है कि अगर आपको 'arg1' मौजूद नहीं है तो कोई त्रुटि नहीं है, यह सुनिश्चित करने के लिए आपको '||' (शॉर्ट-सर्किट ऑपरेटर) का उपयोग करना होगा। – Oli

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

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