默认情况下,如果哈希值存在,使用#[]
将检索该值,如果不存在,则返回nil*.
使用#fetch
提供了几个选项(参见#fetch上的文档):
fetch(key_name)
:如果密钥存在,则获取值,如果不存在,则提高KeyError
fetch(key_name, default_value)
:如果键存在,则获取值,否则返回default_value
fetch(key_name) { |key| "default" }
:如果键存在,则获取值,否则运行提供的块并返回值.每一个都应该根据情况使用,但#fetch
功能非常丰富,可以处理许多情况,具体取决于它的使用方式.出于这个原因,我倾向于使用#[]
访问密钥.
*正如马克·安德烈·拉福琼(Marc AndréLafortune)所说,使用#[]
访问密钥时,如果存在,将调用#default_proc
,否则返回#default
,默认为nil
.更多信息请参见the doc entry for ::new
.