2つのArrayからHashを作る方法に出てくる*の意味は何でしょうか？


[merge two arrays into a hash - Ruby Forum](https://www.ruby-
forum.com/topic/125944)を参考に2つのArrayからHashを作る方法を書きました。

[code]

    keys = %i(a b c)
    values = [1,2,3]
    Hash[*keys.zip(values).flatten] #=> {:a=>1, :b=>2, :c=>3}
    
[/code]

この場面に出てくる`*`の意味はなんでしょうか？

[code]

    p *keys
    
[/code]

とした場合

> :a  
>  :b  
>  :c

と出力されてしまいますし、RubyMineのブレイクポイントで確認しようとすると、

[code]

    0> *keys
    => /Users/shingo/Documents/sample/hoge.rb:3: syntax error, unexpected '.', expecting '='
    (*keys).inspect
    
[/code]

となってしまいます。




ドキュメント<http://docs.ruby-lang.org/ja/2.3.0/doc/spec=2fcall.html>に記述があります。

> 最後の引数の直前に * がついている場合、その引数の値が展開されて渡されます

今回の例では、`keys.zip(values).flatten` の結果の `[:a, 1, :b, 2, :c, 3]`
が展開されて、`Hash[:a, 1, :b, 2, :c, 3]` という呼び出しになり、その結果、`{:a=>1, :b=>2, :c=>3}`
が得られています。




ドキュメント<http://docs.ruby-lang.org/ja/2.3.0/doc/spec=2fcall.html>に記述があります。

> 最後の引数の直前に * がついている場合、その引数の値が展開されて渡されます

今回の例では、`keys.zip(values).flatten` の結果の `[:a, 1, :b, 2, :c, 3]`
が展開されて、`Hash[:a, 1, :b, 2, :c, 3]` という呼び出しになり、その結果、`{:a=>1, :b=>2, :c=>3}`
が得られています。

