Ruby 使用传递给散列#获取的块

Ruby 使用传递给散列#获取的块,ruby,Ruby,返回给定键的哈希值。 它还接受一个可选块: h = { "a" => 100, "b" => 200 } h.fetch("a") #=> 100 h.fetch("z", "go fish") #=> "go fish" h.fetch("z") { |el| "go fish, #{el}"} #=> "go fish, z" 我们可以假设一个块将帮助我们处理与给定键相

返回给定键的哈希值。 它还接受一个可选块:

h = { "a" => 100, "b" => 200 }
h.fetch("a")                            #=> 100
h.fetch("z", "go fish")                 #=> "go fish"
h.fetch("z") { |el| "go fish, #{el}"}   #=> "go fish, z" 
我们可以假设一个块将帮助我们处理与给定键相关的值。但是,该块似乎生成的是键而不是值(请参阅上面
fetch
的第三个调用)

这种实现有什么用?我没有看到
中的任何点被传递到块,因为它已经被知道了;人们感兴趣的是
,调用
fetch
就可以看出这一点


更新:这是一个无效的问题,我误读了文档。抱歉

该块用于处理缺少的值-由于没有值,因此无法生成该值


您应该使用该键返回一个合适的值(或者在适当的情况下引发异常)

如果该键确实有一个值,在这种情况下您会怎么做?我仍然不确定它的用途。如果散列中存在密钥,则不会执行该块
fetch
只返回相应的哈希值。@您可以提供默认值,也可以提供要执行并使用的块。有时无法预先知道值,就像第三个示例一样,它取决于键,因此需要动态计算。这就是块允许您执行的操作。当散列没有此类键的值时,将计算块。它如何传递一个值呢?好吧,我猜我看错了文档,我只是读了部分
,如果给定了block…
还有其他类似的操作方法,例如(和
合并!/update
)和当提供了一个block时(或
fetch
的默认参数)
merge
将出现在合并的两个散列中的键的值延迟到块中(并且只有在该块中)<代码>数组#fetch在仅引用越界索引时调用块。