我在ruby中面对选项参数的问题。 这是我的代码:
def foo options={:test => true}
puts options[:test]
end
foo # => puts true
foo :lol => 42 # => puts nil
我无法弄清楚为什么第二次调用为零。 似乎将其他参数设置为:test为nil。
感谢。
答案 0 :(得分:1)
这是因为如果它是默认参数,传递哈希参数将完全覆盖它(即它设置options = {:lol => 42}
),因此options[:test]
键不再存在。
要提供特定的哈希键默认值,请尝试:
def foo options={}
options = {:test => true}.merge options
puts options[:test]
end
在这种情况下,我们将哈希与某些键({:test => true}
)的默认值和另一个哈希(在参数中包含key =>值)合并。如果两个哈希对象都出现密钥,则传递给merge
函数的哈希值将优先。