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

यह एक बग है जो रूबी 2.0.0-p247 में तय किया गया था, this issue देखें।

+0

जुड़ा हुआ मुद्दा बैकपोर्टिंग का उल्लेख करता है। व्यावहारिक रूप से मेरे लिए इसका क्या अर्थ है? क्या मैं किसी भी तरह रूबी के 2.0.0-पी 247 संस्करण को अपडेट कर सकता हूं? या इसका मतलब यह है कि 2.0.0-पीएक्स के जारी किए गए किसी भी रिलीज के बाद यह ठीक होगा? –

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

यह ओपी के काल्पनिक उदाहरण के लिए काम करता है। लेकिन यदि मूल विधि परिभाषा में कई वैकल्पिक कीवर्ड तर्क शामिल हैं, तो आपकी उदाहरण पंक्ति (जिसके परिणामस्वरूप 21) उन्हें प्राप्त 'ऑप्ट' तर्क में हटा देंगे, क्योंकि केवल 'राशि' कुंजी पारित की जाएगी। जैसा कि है, मेरा वर्तमान उपयोग केस hypothetical उदाहरण है, तो यह मदद करता है। –

संबंधित मुद्दे