ハッシュとブロック

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