0

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

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

或者我应该在循环外初始化它并执行以下操作:

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

2 回答 2

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

于 2015-07-29T01:23:17.263 回答
0

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

100.times do |accumulator|
  p accumulator
end

与您的示例的唯一区别是您有一个对象属性作为累加器,因此如果您需要该属性以供以后使用,您可以执行以下操作

100.times do |c|
  @accumulator = c
end
于 2015-07-29T01:23:10.773 回答