メソッドチェーンを使用して、次のコードを修正し、各反復で変数multとnが出力されるようにします。これを達成するのに役立つ方法は何ですか?
(1..3).inject {|mult, n| mult * n}
メソッドチェーンを使用して、次のコードを修正し、各反復で変数multとnが出力されるようにします。これを達成するのに役立つ方法は何ですか?
(1..3).inject {|mult, n| mult * n}
Enumerable#tapはあなたが必要とするものです
(1..3).inject { |mult, n| (mult * n).tap { |next_mult| p [n, mult, next_mult] } }
これは私には解決策よりも単純に見えtap
ます。それは好みの問題かもしれません。
(1..3).inject do |mult, n|
puts "#{mult} #{n}"
mult * n
end
1 2
2 3
=> 6
反復回数に関するbodhidarmaの他の質問に答えるために、ドキュメントは次のように述べています。
メモの初期値を明示的に指定しない場合は、コレクションの最初の要素をメモの初期値として使用します。
このような:
>> (1..3).inject {|mult, n| r = mult * n; p "mult = #{mult}, n = #{n}, mult * n = #{r}"; r}
"mult = 1, n = 2, mult * n = 2"
"mult = 2, n = 3, mult * n = 6"