1

このメソッドの星について質問があります。

def multiplies_array(*numbers)
  numbers.inject(1, :*)
end

引数リストの星印 ( ) の意味は何*numbersですか? 1, :*また、コロンの後の星 ( )の意味は何ですか?

4

2 に答える 2

3

最初の星はスプラット オペレーターです。この場合、与えられたすべてのパラメータをmultiplies_array単一の配列に「収集」します。

このように4つのパラメーターで呼び出すと...

multiplies_array 1, 2, 3, 4

... は、メソッド内に 4 つの要素を持つ単一の配列を提供します。

これは次と同等です。

def multiplies_array(numbers) # Without splat operator
end 

multiplies_array [1, 2, 3, 4]

2番目の星は少し紛らわしいです。ここで、乗算演算子の意味は次のとおりです。

:記号を表します。すべてのEnumerableメソッドで、シンボルをショートカットとして渡すことができます。「この名前でメソッドを呼び出す」という意味です。

つまり、*メソッドは数値配列の各項目に適用されます。シンボル ショートカットがない場合、その行は次のようになります。

numbers.inject(1) { |result, number| result * number) }

これがRubyの魔法のすべてに少し光を当てることを願っています:)

于 2013-04-09T07:52:30.773 に答える
1

注入のドキュメントを参照してください。

「メソッドまたは演算子に名前を付けるブロックまたはシンボルで指定された二項演算を適用することにより、列挙型のすべての要素を結合します。」

したがって、 は:*で乗算演算子を指定していますnumbers.inject(1, :*):*はそれをシンボルとして指定していますがnumbers.inject(1, '*')、同様に行うこともできます。シンボルを使用することは、より慣用的です。

于 2013-04-09T07:54:22.500 に答える