我在 ruby 中遇到了一个与可选参数有关的奇怪问题。这是我的代码:
def foo options={:test => true}
puts options[:test]
end
foo # => puts true
foo :lol => 42 # => puts nil
我不明白为什么第二个电话为零。似乎将另一个参数集 :test 设置为 nil。
谢谢。
我在 ruby 中遇到了一个与可选参数有关的奇怪问题。这是我的代码:
def foo options={:test => true}
puts options[:test]
end
foo # => puts true
foo :lol => 42 # => puts nil
我不明白为什么第二个电话为零。似乎将另一个参数集 :test 设置为 nil。
谢谢。
发生这种情况是因为如果它是默认参数,则传递哈希参数将完全覆盖它(即它设置options = {:lol => 42}
),因此options[:test]
键不再存在。
要为特定的哈希键提供默认值,请尝试:
def foo options={}
options = {:test => true}.merge options
puts options[:test]
end
在这种情况下,我们将带有某些键 ( ) 的默认值的哈希{:test => true}
与另一个哈希(包含参数中的 key=>values)合并。如果一个键出现在两个散列对象中,则传递给merge
函数的散列值将优先。