2013-03-18 4 views
9

해시 및 선택적 키워드 인수를 허용하는 메서드를 갖고 싶습니다. 나는 키워드 인수를이 메소드를 호출 할 때위치 인수가 키워드 인수로 확장되지 않게하려면 어떻게합니까?

def foo_of_thing_plus_amount(thing, amount: 10) 
    thing[:foo] + amount 
end 

, 그것은 내가 예상대로 작동합니다 :이 같은 방법을 정의하는 시도

my_thing = {foo: 1, bar: 2} 
foo_of_thing_plus_amount(my_thing, amount: 20) # => 21 

나는 키워드 인수를 떠날 때를, 그러나, 해시 가져옵니다.

foo_of_thing_plus_amount(my_thing) # => ArgumentError: unknown keywords: foo, bar 

어떻게 이런 일이 발생하지 않도록 할 수 있습니까? 안티 - 스 플랫 같은 것이 있습니까?

+0

감사합니다. 적어도 지금은 해결 방법을 알고 있습니다 : 키워드 매개 변수를 매번 사용하십시오. 꽤 짜증나. –

답변

4

이것은 Ruby 2.0.0-p247에서 수정 된 버그입니다 (this issue 참조).

+0

링크 된 문제는 백 포트를 언급합니다. 그게 내게 의미있는 것은 무엇입니까? 2.0.0-p247 버전의 루비를 어떻게 든 업데이트 할 수 있습니까? 또는 2.0.0-pX의 릴리즈가 수정 된 후에 발행 한 릴리즈를 의미합니까? –

1

무엇

def foo_of_thing_plus_amount(thing, opt={amount: 10}) 
    thing[:foo] + opt[:amount] 
end 

my_thing = {foo: 1, bar: 2} # {:foo=>1, :bar=>2} 
foo_of_thing_plus_amount(my_thing, amount: 20) # 21 
foo_of_thing_plus_amount(my_thing) # 11 

어떻습니까?

+0

이것은 OP의 가설적인 예에 ​​사용됩니다. 그러나 원래의 메소드 정의에 여러 개의 선택적 키워드 인수가 포함 된 경우, 'amount' 키만 전달되기 때문에 수신 한'opt' 인수에서이를 제거하는 예제 라인 (21이라는 결과)이 제거됩니다. 그대로, 현재의 유스 케이스가 가상의 예이므로 이것이 도움이됩니다. –

관련 문제