在使用哈希函数时获取vs. ?
从Ruby Koans about_hashes.rb : 
 为什么要在访问哈希键时使用#fetch而不是#[] ? 
 默认情况下,使用#[]将检索散列值,如果不存在*,则返回nil。 
 使用#fetch提供了几个选项(请参阅#fetch上的文档): 
-   fetch(key_name):如果键存在,则获取该值,否则引发KeyError
-   fetch(key_name, default_value):如果密钥存在,则获取该值,否则返回default_value
-  fetch(key_name) { |key| "default" }fetch(key_name) { |key| "default" }:如果键存在,则获取该值,否则运行提供的块并返回值。
 每一个应该作为情况需要使用,但#fetch是非常丰富的function,可以处理很多情况下,取决于如何使用。 出于这个原因,我倾向于用#[]来访问密钥。 
  *正如Marc-AndréLafortune所说的,如果访问一个带有#[]的键,将会调用#default_proc ,否则返回#default ,默认为nil 。 有关更多信息,请参阅::new的文档条目 。 
 使用[] ,哈希的创build者可以控制当某个键不存在时发生的情况,并可以fetch 。 
 如果找不到密钥,则默认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