2013-03-18 13 views
9

Karma ve isteğe bağlı bir anahtar kelime bağımsız değişkenini kabul eden bir yönteme sahip olmak isterim. Anahtar kelime argümanla bu yöntemi çağırmakBir konum argümanının anahtar kelime argümanlarına genişletilmesini nasıl önleyebilirim?

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

, bu beklediğim gibi çalışır: Böyle bir yöntemi tanımlayan çalıştı

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

anahtar kelime argüman dışında bırakmak, ancak, karma yenir:

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

Bunun olmasını nasıl engelleyebilirim? Anti-uyarısı gibi bir şey var mı?

+0

Teşekkürler. En azından bir geçici çözüm biliyorum: her zaman anahtar kelime parametresini kullanın. Oldukça can sıkıcı. –

cevap

4

Bu, Ruby 2.0.0-p247'de düzeltilmiş bir hatadır, bkz. this issue.

+0

Bağlantılı konu backporting'ten bahsediyor. Bu benim için ne anlama geliyor? Ruby'nin 2.0.0-p247 versiyonunu bir şekilde güncelleyebilir miyim? Ya da bu düzeltmeyi yaptıktan sonra 2.0.0-pX sürümü ne zaman yayınlandı? –

1

Ne

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 

hakkında?

+0

Bu, OP'nin varsayımsal örneği için çalışır. Ancak, orijinal yöntem tanımı birden fazla isteğe bağlı anahtar kelime argümanını içeriyorsa, örnek satırınız (21'de sonuçlanır) bunları alınan 'opt' argümanında kaldırır, çünkü yalnızca' miktar 'tuşu geçirilir. Olduğum haliyle, geçerli kullanım durumum varsayımsal örnek IS, bu yardımcı oluyor. –

İlgili konular