options.fetch。我不明白

时间:2010-05-10 03:09:13

标签: ruby-on-rails ruby

查看关于this thread的讨论。我无法理解如何使用块来获取是一个更好的解决方案。

2 个答案:

答案 0 :(得分:5)

first patch上的Rails ticket #4558

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

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

updated patch

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中的“早期崩溃”)