これ*
は「splat オペレーター」と呼ばれます。技術的な定義を提供できるかどうかはわかりませんが (Google の助けを借りればすぐに見つけられると思いますが)、基本的に複数の手書きの代わりになるということです。コード内のコンマ区切り値。
これをより具体的にするためHash[]
に、例で使用したケースを考えてみましょう。Hash
クラスには、可変数の[]
引数を取り、通常は次のように呼び出すことができるクラス メソッドがあります。
# Returns { "foo" => 1, "bar" => 2 }
h = Hash["foo", 1, "bar", 2]
それが配列でもハッシュでも、私が渡したものでもないことに注意してください。これは (手書きの) 一連の値です。演算子を使用すると、配列を使用して基本的に同じことを実現できます。*
あなたの場合は、によって返されたものmovie_popularity.sort_by{|m,p| p}.reverse.flatten
です。
そのflatten
呼び出しsort_by
について: ハッシュを呼び出すと、列挙を提供するEnumerable
さまざまなクラス (特にArray
と) に含まれているモジュールを実際に活用しています。Hash
ハッシュの場合、次のように反復する代わりに、おそらく気づいたことでしょう。
hash.each { |value| ... }
代わりにこれを行います:
hash.each { |key, value| ... }
つまり、ハッシュを反復すると、各反復で2 つの値が得られます。したがって、sort_by
独自の呼び出しは一連のペアを返します。flatten
この結果を呼び出すと、次のようにペアが 1 次元の値のシーケンスに折りたたまれます。
# Returns [1, 2, 3, 4]
[[1, 2], [3, 4]].flatten