options.fetch.我不明白

Nic*_*ilt 1 ruby ruby-on-rails

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

Jas*_*red 5

第一个补丁的Rails票#4558:

options.fetch(:alt, File.basename(src, '.*').capitalize)
Run Code Online (Sandbox Code Playgroud)

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

更新的补丁中:

options.fetch(:alt) { File.basename(src, '.*').capitalize }
Run Code Online (Sandbox Code Playgroud)

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

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