0

我在 ruby​​ 中遇到了一个与可选参数有关的奇怪问题。这是我的代码:

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

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

我不明白为什么第二个电话为零。似乎将另一个参数集 :test 设置为 nil。

谢谢。

4

1 回答 1

1

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

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

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

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

于 2012-08-25T04:26:16.850 回答