type=class
superclass=Object
included=Enumerable
extended=
dynamically_included=JSON=Generator=GeneratorMethods=Hash
dynamically_extended=
library=_builtin
aliases=
aliasof=

ハッシュテーブル(連想配列とも呼ぶ)のクラスです。ハッシュは任意の種類のオブ
ジェクト(キー)から任意の種類のオブジェクト(値)への関連づけを行うことができます。

ハッシュ生成は多くの場合以下のようなリテラル ([[ref:d:spec/literal#hash]]) で行われます。

  {a => b, ... }   # aはキー、bは値となる
  {s: b , ... }    # { :s => b, ... } と同じ。キーがシンボルの場合の省略した書き方

キーには任意の種類のオブジェクトを用いることができますが、
以下の２つのメソッドが適切に定義してある必要があります。
  * [[m:Object#hash]] ハッシュの格納に用いられるハッシュ値の計算
  * [[m:Object#eql?]] キーの同一性判定

破壊的操作によってキーとして与えたオブジェクトの内容が変化し、[[m:Object#hash]] の返す
値が変わるとハッシュから値が取り出せなくなりますから、
[[c:Array]]、[[c:Hash]]
などのインスタンスはキーに向きません。[[m:Hash#rehash]] を参照。

ただし、 更新不可 ([[m:Object#frozen?]] が true) では無い文字列をキーとして与えた場合は、文字列をコピーし、コピーを更新不可に設定 ([[m:Object#freeze]]) してキーとして
使用します。この為、キーとして使われている文字列を更新しようとすると例外 
[[c:RuntimeError]] 
が発生するので rehash を呼ぶ必要性は生じません。

ハッシュにはデフォルト値を設定することができます。存在しないキーを探索したときに返す値で、未設定時は nil です。
デフォルト値には値形式とブロック形式があります。
実際にデフォルト値がどのように扱われるかは各メソッドの説明を参照してください。

ハッシュに含まれる要素の順序が保持されるようになりました。
ハッシュにキーが追加された順序で列挙します。
