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

为了回答菩提达摩关于迭代次数的另一个问题,文档说:

如果没有明确指定 memo 的初始值,则使用 collection 的第一个元素作为 memo 的初始值。

于 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 回答