2011-02-11 7 views
25

मेरे पास एक विधि है, जो अधिकतम 2 तर्क स्वीकार करनी चाहिए। इसका कोड इस प्रकार है:अधिकतम पैरामीटर के साथ रूबी विधि

def method (*args) 
    if args.length < 3 then 
    puts args.collect 
    else 
    puts "Enter correct number of arguments" 
    end 
end 

क्या इसे निर्दिष्ट करने के लिए और अधिक शानदार तरीका है?

उत्तर

67

आपके पास कई विकल्प हैं, आप कितना विधि वर्बोज़ और सख्त होना चाहते हैं पर निर्भर करता है।

# force max 2 args 
def foo(*args) 
    raise ArgumentError, "Too many arguments" if args.length > 2 
end 

# silently ignore other args 
def foo(*args) 
    one, two = *args 
    # use local vars one and two 
end 

# let the interpreter do its job 
def foo(one, two) 
end 

# let the interpreter do its job 
# with defaults 
def foo(one, two = "default") 
end 
+24

+1 लेकिन आप 'def (एक, दो, * अनदेखा) भूल गए; end' –

12

यदि अधिकतम दो तर्क हैं, तो स्प्लट ऑपरेटर का उपयोग क्यों करें? बस स्पष्ट हो।

def foo(arg1, arg2) 
    # ... 
end 

या ...

def foo(arg1, arg2=some_default) 
    # ... 
end 

या यहां तक ​​कि ...

def foo(arg1=some_default, arg2=some_other_default) 
    # ... 
end 
5

एक त्रुटि उठाएँ (जब तक वहाँ कुछ अन्य बाधा है कि आप हमारे बारे में नहीं बताया है। है) बेहतर। यदि तर्क सही नहीं हैं, तो यह गंभीर समस्या है, जो आपके विनम्र puts के साथ पास नहीं होनी चाहिए।

def method (*args) 
    raise ArgumentError.new("Enter correct number of arguments") unless args.length < 3 
    puts args.collect 
end