使用方法链接我想修改以下代码,以便在每次迭代时打印变量 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
为了回答菩提达摩关于迭代次数的另一个问题,文档说:
如果没有明确指定 memo 的初始值,则使用 collection 的第一个元素作为 memo 的初始值。
像这样:
>> (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"