ハッシュリテラル

要素の順序性がある場合に使う配列と、順序性がない場合に使うハッシュ。
Rubyのハッシュの言語仕様について。

基本的な書き方

PHPと同じようにキーとして文字列を使う場合は以下の通り。


a = {"hoge1" => 100, "hgoe2" => 200, "hoge3" => 300}
a["hoge1"] # 100
a["hoge2"] # 200
a["hoge4"] # nil

キーとしてシンボルを使う場合は以下の通り。Rubyっぽくなる。
Ruby1.9以降はこちらを使う。


b = {:hoge1 => 100, :hoge2 => 200, :hoge3 => 300}
b[:hoge1] # 100
b[:hoge2] # 200
b[:hoge4] # nil

Hash.new()による生成

Hash.new()により配列の初期値として新たに確保した変数を設定できる。
Array.new()と同様に、全ての要素として同じオブジェクトを設定する。


a = Hash.new(100)
a[:hoge1]  #  100
a[:hoge1].object_id # 12345
a[:hoge2]  #  100
a[:hoge2].object_id # 12345

[]による生成

面倒くさいことに、キーと値が交互に現れる配列からハッシュを生成できる。
その書き方は以下の通り。


a = Hash[:hoge1, 100, :hoge2, 200, :hoge3, 300] # [:hoge1=>100,:hoge2=>200,:hoge3=>300]
b = [[:hoge1,100],[:hoge2,200],[:hoge3,300]].to_h # [:hoge1=>100,:hoge2=>200,:hoge3=>300]

関数の引数、波カッコの省略

関数にハッシュを引数として与える場合、ハッシュを構成する波カッコを省略できる。
というか、引数の数が合わなかったときに末尾の処理の一つである様子。
ハッシュ引数の波カッコの種略を引数の先頭にもってくると(末尾の引数でないと)、例外が発生する。


def func a, b, c
  c
end
func 100,200,:hoge1=>300,:hoge2=>400 # {:hoge1=>300,:hoge2=>400}
func :hoge1=>100,:hoge2=>200,300,400

func :hoge1=>100,:hoge2=>200,300,400 # 例外

キーワード引数

Rubyっぽい書き方。キーワード引数。
キーワードにシンボルで名前をつけることができる。関数を呼び出す時の可読性が向上する。


def func hoge1:, hoge2:, hoge3
   hoge1 + hoge2 + hoge3
end
func 100,200,300 # 600