使用块传递给Hash #fetch

时间:2015-09-15 19:12:56

标签: ruby

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

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的第三次调用)。

这种实施有什么用?我没有看到key被传递到街区的任何一点,因为它已经知道了;它是人们感兴趣的value,这可以通过致电fetch来证明。

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

1 个答案:

答案 0 :(得分:5)

该块用于处理缺失值 - 由于没有值,因此不会产生该值。

您应该使用密钥返回合适的值(或在适当时提出异常)