当注入遍历范围时,可以使用什么方法来打印变量?

时间:2013-02-02 02:20:54

标签: ruby methods inject method-chaining

使用方法链接我想修改以下代码,以便在每次迭代时打印变量mult和n。有什么方法可以帮助实现这个目标?

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

3 个答案:

答案 0 :(得分:3)

你需要

Enumerable#tap

(1..3).inject { |mult, n| (mult * n).tap { |next_mult| p [n, mult, next_mult] } }

答案 1 :(得分:1)

这对我来说比tap解决方案更简单。这可能是一个品味问题。

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

1 2
2 3
=> 6

要回答bodhidarma关于迭代次数的其他问题,docs说:

  

如果没有明确指定备忘录的初始值,则使用集合的第一个元素作为备忘录的初始值。

答案 2 :(得分: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"