読者です 読者をやめる 読者になる 読者になる

Ruby の Hash#map に渡すブロックは引数の数によって受け取り方が異なる

Hash#map は渡したブロックの引数の数によって受け取り方が異なります。

homu = { name: :homu, age: 14 }

# 引数が2つの場合はキーと値が別々に渡される
homu.map { |key, value| "#{key} : #{value}" }
# => ["name : homu", "age : 14"]

# 引数が1つの場合は、[キー, 値]の配列が渡される
homu.map { |item| "#{item[0]} : #{item[1]}" }
# => ["name : homu", "age : 14"]

# 可変長引数の場合は、引数が1つの時と同じ挙動になる
homu.map { |*args| "#{args[0][0]} : #{args[0][1]}" }
# => ["name : homu", "age : 14"]

この挙動は Hash#each に依存してるようなので Enumerable モジュールのメソッドは多分全部この仕様だと思う。