数値の階乗を計算する方法を調べると、次のコードに出くわしました。
(1..5).inject(:*) || 1 # => 120
何をしているの(:*) || 1ですか?
(1..5).inject(1) { |x, y| x * y } # => 120を使用.injectして同様の機能を実現するこのコード行と比較してどうですか?
数値の階乗を計算する方法を調べると、次のコードに出くわしました。
(1..5).inject(:*) || 1 # => 120
何をしているの(:*) || 1ですか?
(1..5).inject(1) { |x, y| x * y } # => 120を使用.injectして同様の機能を実現するこのコード行と比較してどうですか?
コロンスター自体は、Ruby では何の意味もありません。これは単なるシンボルinjectであり、列挙可能なメソッドにシンボルを渡すことができます。そのシンボルは、列挙可能な要素で使用されるメソッドまたは演算子を指定します。
例えば:
(1..5).inject(:*) #=> 1 * 2 * 3 * 4 * 5 = 120
(1..5).inject(:+) #=> 1 + 2 + 3 + 4 + 5 = 15
この|| 1部分は、偽の値をinject返す場合は代わりに使用されることを意味します。(あなたの例では決して起こりません。)1
test.rb:
def do_stuff(binary_function)
2.send(binary_function, 3)
end
p do_stuff(:+)
p do_stuff(:*)
$ ruby test.rb
5
6
メソッド名をシンボルとして渡すと、send 経由で呼び出すことができます。これは、inject と友人が行っていることです。
その部分については||、左辺が nil または false を返す場合はlhs || 11 を返します
絶対に平等です。好みに合わせて、それぞれの方法で使用できます。