2009-03-29 11 views
7

Mam metodę tak:W metodzie, która bierze wiele opcjonalnych parametrów, jak można podać dowolną, ale pierwszą?

def foo(fruit='apple', cut="sliced", topping="ice cream") 
    # some logic here 
end 

Jak mogę nazwać gdzie tylko zastąpić parametr polewa ale użyć wartości domyślnych dla innych, coś takiego

foo('','','hot fudge') 

to oczywiście nie działa zgodnie z przeznaczeniem, ale chcę podać tylko wartość trzeciego opcjonalnego parametru, a pierwsze dwa powinny być zgodne z ich wartościami domyślnymi. Wiem, jak to zrobić z hashem, ale czy jest to skrót do tego sposobu, używając powyższej składni?

Odpowiedz

17

Nie można użyć tej składni, aby zrobić to w ruby. Polecam w tym celu składnię skrótu.

def foo(args={}) 
    args[:fruit] ||= 'apple' 
    args[:cut]  ||= 'sliced' 
    args[:topping] ||= 'ice cream' 
    # some logic here 
end 

foo(:topping => 'hot fudge') 

Można to zrobić także z pozycyjnym argumenty:

def foo(fruit=nil,cut=nil,topping=nil) 
    fruit ||= 'apple' 
    cut  ||= 'sliced' 
    topping ||= 'ice cream' 
    # some logic here 
end 

foo(nil,nil,'hot fudge') 

pamiętać, że obie te techniki uniemożliwić przechodząc rzeczywiste nil argumentów do funkcji (kiedy może chcesz czasami)

2

Nie. Należy sprawdzić wartość parametrów wewnątrz funkcji foo. Jeśli są to puste ciągi lub null, możesz ustawić je na domyślny parametr.

15

Jak Ruby 2.0, można użyć argumentów słów kluczowych:

def foo(fruit: 'apple', cut: "sliced", topping: "ice cream") 
    [fruit, cut, topping] 
end 

foo(topping: 'hot fudge') # => ['apple', 'sliced', 'hot fudge'] 
+0

A od Ruby 2.1 obsługa "obowiązkowych argumentów słów kluczowych", patrz [informacje o wydaniu] (https://github.com/ruby/ruby/blob/ruby_2_1/NEWS#L16-17) – Epigene

Powiązane problemy