设置可选参数,将其他参数设置为nil的默认值

时间:2012-08-25 04:21:10

标签: ruby

我在ruby中面对选项参数的问题。 这是我的代码:

def foo options={:test => true}
    puts options[:test]
end

foo # => puts true
foo :lol => 42 # => puts nil

我无法弄清楚为什么第二次调用为零。 似乎将其他参数设置为:test为nil。

感谢。

1 个答案:

答案 0 :(得分:1)

这是因为如果它是默认参数,传递哈希参数将完全覆盖它(即它设置options = {:lol => 42}),因此options[:test]键不再存在。

要提供特定的哈希键默认值,请尝试:

def foo options={}
  options = {:test => true}.merge options
  puts options[:test]
end

在这种情况下,我们将哈希与某些键({:test => true})的默认值和另一个哈希(在参数中包含key =>值)合并。如果两个哈希对象都出现密钥,则传递给merge函数的哈希值将优先。