0

メソッドチェーンを使用して、次のコードを修正し、各反復で変数multとnが出力されるようにします。これを達成するのに役立つ方法は何ですか?

(1..3).inject {|mult, n| mult * n}
4

3 に答える 3

3

Enumerable#tapはあなたが必要とするものです

(1..3).inject { |mult, n| (mult * n).tap { |next_mult| p [n, mult, next_mult] } }
于 2013-02-02T02:36:59.640 に答える
1

これは私には解決策よりも単純に見えtapます。それは好みの問題かもしれません。

(1..3).inject do |mult, n|
  puts "#{mult} #{n}"
  mult * n
end

1 2
2 3
=> 6

反復回数に関するbodhidarmaの他の質問に答えるために、ドキュメントは次のように述べています。

メモの初期値を明示的に指定しない場合は、コレクションの最初の要素をメモの初期値として使用します。

于 2013-02-02T04:16:34.940 に答える
0

このような:

>> (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"
于 2013-02-02T04:02:37.607 に答える