2012-08-25 58 views
0

我在ruby中遇到了可选参数的weirb问题。 这是我的代码:设置可选参数将其他参数的默认值设置为零

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

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

我想不通,为什么第二个电话把零。 似乎是把其他参数设置为:测试为零。

谢谢。

+0

相关:https://github.com/bbatsov/ruby-style-guide/issues/63 – tokland

回答

1

发生这种情况的原因是,如果它是默认参数,传递散列参数将完全覆盖它(即它设置options = {:lol => 42}),因此options[:test]键不再存在。

为了给特定散列键的缺省值,尝试:

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

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

相关问题