在Ruby中,我应该使用控制流来初始化循环中的累加器吗?

时间:2015-07-29 01:15:03

标签: ruby initialization accumulate

初始化这样的累加器是一种好习惯吗?

100.times do
  @accumulator = (@accumulator || 0) + 1
end

或者我应该在循环之外初始化它并执行:

@accumulator = 0   
100.times do
  @accumulator += 1
end

2 个答案:

答案 0 :(得分:2)

要直接回答您的问题,我通常会在循环外进行初始化。

但是,我认为最佳做法是以块形式使用更高阶函数,而不需要显式循环。

@accumulator = 100.times.reduce do |memo, element|
  memo + element
end

或者,在这种情况下,您甚至可以使用符号来指定方法:

@accumulator = 100.times.reduce(:+)

这适用于" +"依次对每一对的方法。

http://ruby-doc.org/core-2.1.0/Enumerable.html#method-i-reduce

答案 1 :(得分:0)

我喜欢第二个。但如果您正在寻找.times方法的累加器,您可以使用

100.times do |accumulator|
  p accumulator
end

与你的例子的唯一区别是你有一个object属性作为accumulattor,所以如果你需要这个属性用于后一种用法,你可以做这样的事情

100.times do |c|
  @accumulator = c
end