2009-03-29 3 views
7

나는이 같은 방법 : 만, 물론이의이여러 개의 선택적 매개 변수를 사용하는 방법에서 어떻게 첫 번째 매개 변수를 지정할 수 있습니까?

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

같은 것을 토핑 매개 변수를 무시하지만, 다른 사람에 대한 기본값을 사용 어디를 호출 할 수있는 방법

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

의도 한대로 작동하지 않지만 세 번째 선택적 매개 변수의 값만 제공하고 첫 번째 두 개는 기본값을 사용합니다. 해시를 사용하여이 작업을 수행하는 방법을 알고 있지만 위의 구문을 사용하여 작업을 수행하는 가장 쉬운 방법은 무엇입니까?

답변

17

이 구문을 사용하여 루비에서 사용할 수 없습니다. 나는 이것을 위해 해쉬 구문을 추천 할 것이다.

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

foo(:topping => 'hot fudge') 

또한이 사용하는 위치 인수를 할 수있는 :

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

foo(nil,nil,'hot fudge') 

곰을 염두에 이러한 기술 모두 기능 에 실제 nil 인수를 전달하지 못하도록하는

(당신이 할 수 있습니다 때때로까지)
2

아니요. 함수 foo 내부의 매개 변수 값을 확인해야합니다. 빈 문자열 또는 null 인 경우 기본 매개 변수로 설정할 수 있습니다.

15

Ruby 2.0에서 키워드 인수를 사용할 수 있습니다.

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

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

그리고 Ruby 2.1에서 'mandatory keyword arguments'에 대한 지원이 있습니다. [릴리스 정보] (https://github.com/ruby/ruby/blob/ruby_2_1/NEWS#L16-17)를 참조하십시오. – Epigene

관련 문제