Rubyでこんなコード片を見かけて混乱した。
obj = [ a: "b", x: "y" ]
括弧は配列のものだが、中身はハッシュの書き方になっている。
業務で実際に動いているコードなので、文法エラーでないことは確か。
答え
irbなどで実行してみればすぐにわかる。同等のコードは以下の通り。
クリックして展開
obj = [{ a: "b", x: "y" }]
#=> [{:a=>"b", :x=>"y"}]
要するに「ハッシュを要素とする配列」。
思い返してみると、メソッド呼び出しの引数の最後ではハッシュの波括弧を省略できていた。配列リテラルの中も、引数と同じような扱いなのだろう。
def mtd(*args)
p args
end
mtd 1, 2, a: "b", x: "y"
#=> [1, 2, {:a=>"b", :x=>"y"}]