options.fetch。 我不明白

看看这个post的讨论。 我无法理解如何使用块来获取是一个更好的解决方案。

在Rails票证#4558的第一个补丁中 :

options.fetch(:alt, File.basename(src, '.*').capitalize) 

该行执行basename和capitalize函数,然后将结果传递给Hash#fetch而不管选项哈希中是否存在:alt值。

在更新的补丁中 :

 options.fetch(:alt) { File.basename(src, '.*').capitalize } 

只有在Hash#fetch需要默认值时才会执行相同的basename / capitalize代码(即当选项哈希中不存在:alt键时)。 这意味着如果不需要,可以跳过(可能很昂贵的)默认值的计算。

有关更多详细信息,请参阅有关Hash#fetch的文档。

我不知道是什么鸭子冲击Rails已经对Hash#fetch做了什么,但是使用Plain Old Ruby Objects,我使用它而不是Hash#[]因为当我要求某些东西并且它不可用时,我想知道它。 这被称为“早期失败”(或语用程序员 提示列表中的 “早期崩溃”)