一个教程有这个代码块:
h1 = ["a" => 111, "b" => 222]
h2 = ["b" => 333, "c" => 444]
h1.merge(h2) {|key, old, new| new}
# => ["a" => 111, "b" => 333, "c" => 444]
h1.merge(h2) {|key, old, new| old}
# => ["a" => 111, "b" => 222, "c" => 444]
我们与合并有冲突。我们的两个数组中有两个重复的键。new
正在捕获h2
的值"b"
,并输出它会强制它在合并中优先。同样,old
正在捕获h1
的值"b"
,并强制它优先。
为什么我们似乎只获取 的值"b"
?变量不应该抓取整个数组吗?块变量在使用时是否与上下文相关并改变功能,.merge
而不是说,.times
?或者当我们处理数组而不是简单的数字时,它们会改变函数吗?还是他们看到了合并冲突并且就像“我们必须抓住冲突点”?我想也许试着看看里面有什么key
会有所帮助,
h1.merge(h2) {|key, old, new| key}
# => ["a" => 111, "b" => "b", "c" => 444]
但它实际上只是让我更加困惑。为什么一个变量捕获键,而其他变量捕获两个不同的值?