2016-03-02 10 views
13

Gibt es eine Möglichkeit, eine Methode zu erstellen, die einen Parameter akzeptiert, aber auch ohne einen aufgerufen werden kann? In diesem Fall wird der Parameter wie folgt behandelt nil?Eine Methode mit einem optionalen Parameter

some_func(variable) 

some_func 

Antwort

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

Dann muss man natürlich irgendwie di man unterscheidet zwischen default nil und explicit nil (wenn es darauf ankommt) :) –

+3

Das ist, was 'def some_func (variable = (variable_was_not_passed = true; nil)) 'idiom ist für. –

+0

@ JörgWMittag kannst du erklären wie es funktioniert? Vielen Dank! – dowi

12

Neben der offensichtlichen Möglichkeit, Parameter mit Standardwerten, dass Sawa bereits gezeigt hat, Arrays oder Hashes mit möglicherweise in einigen Fällen nützlich sein. Beide Lösungen behalten null als ein Argument bei.

1. Erhalten Sie als Array:

def some_func(*args) 
    puts args.count 
end 

some_func("x", nil) 
# 2 

2. Senden und Empfangen als hash:

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

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

was ist der Zweck der Verwendung von '* arg' und' ** arg' statt nur 'arg'? –

+4

@ sagarpandya82 '* arg' sammelt die Argumente als Array. Ohne das '*' müssten Sie 'some_func ([" x ", nil])' 'aufrufen. '** arg' sammelt alle benannten Argumente. Ohne das '**' würde es entweder nur ein einzelnes unbenanntes Argument oder eine beliebige Anzahl von benannten Argumenten akzeptieren. – bogl

3

Sie können auch einen Hash als Argument verwenden und mehr Freiheit:

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

print_arg 
# => 
print_arg(age: 35, weight: 90) 
# => 35 
Verwandte Themen