ハッシュとブロック
Rubyでハッシュをメソッドに引数として与えようとすると、ブロックと誤解されることがあります。カッコを使うと誤解を解くことができます。
def print_hash(hash) hash.each_pair do |key, value| puts "#{key} => #{value}" end end # print_hash { "Alice" => 20, "Bobby" => 21 } #=> parse error, unexpected tASSOC, expecting '}' print_hash({ "Alice" => 20, "Bobby" => 21 }) __END__ Alice => 20 Bobby => 21
追記:id:walf443さんから、{ } やさらに ( ) も省略するという技を教えていただきました。確かにこうするとDSL (Domain Specific Language)風にできますね。情報ありがとうございます。
def print_hash(hash) hash.each_pair do |key, value| puts "#{key} => #{value}" end end print_hash "Alice" => 20, "Bobby" => 21