Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Hashクラス > fetch

instance method Hash#fetch

fetch(key, default = nil) {|key| ... } -> object[permalink][rdoc]

key に関連づけられた値を返します。該当するキーが登録されてい ない時には、引数 default が与えられていればその値を、ブロッ クが与えられていればそのブロックを評価した値を返します。

fetchはハッシュ自身にデフォルト値が設定されていても単に無視します(挙動に変化がありません)。

[PARAM] key:
探索するキーを指定します。
[PARAM] default:
該当するキーが登録されていない時の返り値を指定します。
[EXCEPTION] IndexError:
引数defaultもブロックも与えられてない時、キーの探索に失敗すると発生します。
h = {:one => nil}
p h[:one],h[:two]                        #=> nil,nil これではキーが存在するのか判別できない。
p h.fetch(:one)                          #=> nil
p h.fetch(:two)                          # エラー key not found (IndexError)
p h.fetch(:two,"error")                  #=> "error"
p h.fetch(:two){|key|"#{key} not exist"} #=> "two not exist"
p h.fetch(:two, "error"){|key|           #=> "two not exist"
    "#{key} not exit"                    #  warning: block supersedes default value argument
  }                                      #  警告が表示される。

h.default = "default"
p h.fetch(:two)                          # エラー key not found (IndexError)

[SEE_ALSO] Hash#[]