Rubyリファレンス: Home

new (Hash)

Edit   History

標準クラス・モジュール > Hash > new

Hash.new

Hashクラスのクラスメソッドnewは、新しい空のハッシュ(Hashクラスのインスタンス)を返します。newメソッドの引数でデフォルト値を指定しないときは、存在しないキーの値を得ようとするとnilが返ります。

hash = Hash.new
p hash
p hash["hello"]
{}
nil
Hash.new(default)

newメソッドに引数defaultを渡すと、ハッシュのデフォルト値になります。存在しないキーの値を得ようとするとデフォルト値が返ります。

hash = Hash.new(:not_found)
puts hash["hello"]
not_found
Hash.new {|hsh, key| block }

newメソッドにブロックを渡すと、存在しないキーが指定されたときにそのブロックを呼び出し、ブロックの戻り値をキーの値として返すようになります。ブロック引数hshにはハッシュ自身、keyには指定されたキーが入ります。

ブロックの中でhshにキーと値を追加すれば、存在しないキーが指定されるたびにハッシュに新しいキーと値が保存されます。

次の例は、キーのオブジェクトに*演算子があれば、2を掛けた結果を値として保存します。

hash = Hash.new do |hsh, key|
  if key.respond_to?(:*)
    hsh[key] = key * 2
  else
    :not_found
  end
end
 
puts hash[2]
puts hash["hello"]
puts hash[Time.now]
p hash
4
hellohello
not_found
{2=>4, "hello"=>"hellohello"}

関連項目