2016-03-02 10 views
13

क्या कोई तरीका है जो एक पैरामीटर स्वीकार कर सकता है, लेकिन बिना किसी के कॉल किया जा सकता है, इस स्थिति में पैरामीटर को nil निम्नलिखित जैसा माना जाता है?वैकल्पिक पैरामीटर के साथ एक विधि

some_func(variable) 

some_func 

उत्तर

34
def some_func(variable = nil) 
    ... 
end 
+3

फिर, ज़ाहिर है, किसी को किसी भी तरह से di डिफ़ॉल्ट शून्य और स्पष्ट शून्य के बीच fferentiate (यदि यह मायने रखता है) :) –

+3

यही है कि 'def some_func (variable = (variable_was_not_passed = true; शून्य)) 'मुहावरे के लिए है। –

+0

@ जोर्गब्लिमटैग क्या आप समझा सकते हैं कि यह कैसे काम करता है? धन्यवाद! – dowi

12

मूलभूत मूल्यों के साथ मापदंडों का और अधिक स्पष्ट विकल्प इसके अलावा, कि सावा पहले से ही पता चला है, सरणियों या हैश के उपयोग कुछ मामलों में काम हो सकता है। दोनों समाधान एक तर्क के रूप में शून्य को संरक्षित करते हैं।

1. सरणी के रूप में प्राप्त करें:

def some_func(*args) 
    puts args.count 
end 

some_func("x", nil) 
# 2 

2. संदेश और हैश के रूप में प्राप्त करते हैं:

def some_func(**args) 
    puts args.count 
end 

some_func(a: "x", b: nil) 
# 2 
+0

केवल 'arg' के बजाय' * arg' और '** arg' का उपयोग करने का उद्देश्य क्या है? –

+4

@ sagarpandya82 '* arg' तर्क को सरणी के रूप में एकत्र करता है। '*' के बिना आपको 'some_func (["x", nil]) कॉल करना होगा। '** arg' सभी नामित तर्क एकत्र करता है। '**' के बिना यह केवल एक ही अज्ञात तर्क, या नामित तर्कों की संख्या को स्वीकार करेगा। – bogl

3

तुम भी तर्क के रूप में एक हैश का उपयोग कर सकते हैं और अधिक स्वतंत्रता है:

def print_arg(args = {}) 
    if args.has_key?(:age) 
    puts args[:age] 
    end 
end 

print_arg 
# => 
print_arg(age: 35, weight: 90) 
# => 35 
संबंधित मुद्दे