Jon*_*rns 138
默认情况下,using #[]将检索哈希值(如果存在),如果哈希值不存在,则返回nil*.
使用#fetch提供了一些选项(请参阅#fetch上的文档):
fetch(key_name):如果密钥存在,则获取值,KeyError如果不存在,则引发afetch(key_name, default_value):如果密钥存在,则获取值,default_value否则返回fetch(key_name) { |key| "default" }:如果键存在,则获取值,否则运行提供的块并返回值.每个应该根据情况需要使用,但#fetch功能非常丰富,可以根据使用方式处理很多情况.出于这个原因,我倾向于使用它来访问密钥#[].
*正如Marc-AndréLafortune所说,访问一个密钥#[]会调用#default_proc它是否存在,否则返回#default,默认为nil.有关 更多信息,请参阅doc条目::new.
fetch默认情况下,如果找不到密钥则会引发错误.您可以改为提供默认值.
h = {}
h.fetch(:foo) # no default value, raises error
# => # ~> -:3:in `fetch': key not found: :foo (KeyError)
h.fetch(:bar, 10) # default value, returns default value
# => 10
Run Code Online (Sandbox Code Playgroud)