查看关于this thread的讨论。我无法理解如何使用块来获取是一个更好的解决方案。
答案 0 :(得分:5)
first patch上的Rails ticket #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
上的文档。
答案 1 :(得分:1)
我不知道对Hash#fetch
做了什么鸭子冲击Rails,但是对于普通的旧Ruby对象,我使用它而不是Hash#[]
,因为当我要求某些内容并且它不可用时,我想了解它。这被称为“早期失败”(或“ The Pragmatic Programmer's”List of Tips中的“早期崩溃”)