アスタリスクとto_a

さっき見たスクリプトに衝撃を受けた。

class Hash
  def safe_invert
    invert.inject( Hash.new{ |h,k| h[k] = [] } ) do |hash, (keys, val)|
      [*keys].each{ |key| hash[key] << val }
      hash
    end
  end
end

1つのキーに複数の値が対応して且つそれぞれの値が重複しているハッシュのキーと値を入れ替えたい時のメソッド(Ruby) - Qiita のコメント欄

[*keys]のアスタリスクは何なの???
おそらく複数要素あるkeysを開いて配列にしてるのだと思うんだけど…

調査…その前に、コメント欄の他の部分を。

元のhashで値が配列でなくても

え?
必ず開けるの?

ぐぐる

まとめてあって詳細だったのがこれ。

Intro to Splat (*) operator in Ruby. | Blog by Ram - Learning to Code \(^o^)/

日本語だと、エッセンスだけだが

Ruby のアスタリスクオペレータ(*) のメモ - わからん

どうやらto_aメソッドに対応するようなのだが、違いもある。
もう少し調べてみる。