';对于';ruby中的循环求和

';对于';ruby中的循环求和,ruby,local-variables,Ruby,Local Variables,我正在尝试对数组值求和。这是我的密码: def addArray(array) for i in array do sum += i end end addArray([1,3,6,8,7,10]); 这个思维过程有什么问题? 我知道还有其他方法可以做到这一点,比如使用reduce甚至sum,但我不是在每次迭代中都向sum添加下一个值吗?您的问题是没有定义变量sum。为了继续使用您选择的方法,请定义变量并在求和后返回: def add_array(array) sum =

我正在尝试对数组值求和。这是我的密码:

def addArray(array)
  for i in array do
    sum += i
  end
end

addArray([1,3,6,8,7,10]);
这个思维过程有什么问题?
我知道还有其他方法可以做到这一点,比如使用
reduce
甚至
sum
,但我不是在每次迭代中都向
sum
添加下一个值吗?

您的问题是没有定义变量
sum
。为了继续使用您选择的方法,请定义变量并在求和后返回:

def add_array(array)
  sum = 0
  for i in array do
    sum += i
  end
  sum
end

puts add_array([1,3,6,8,7,10])

正如其他人提到的,您没有定义
sum
变量

然而,我觉得值得指出的是,有一种现有的Ruby方法可以完美地处理这个问题:

[1,3,6,8,7,10].reduce(:+) # => 35
对于Ruby 2.4以后的版本(或Rails),它更容易:

[1,3,6,8,7,10].sum # => 35
是一种用于在存在累加器的情况下迭代值的方法。以上是以下内容的简写:

# `accumulator` is the equivalent of your `sum`, `element` your `i`
[1,3,6,8,7,10].reduce(0) do |accumulator, element|
  accumulator + element
end

我认为这是最简单的答案。

你在哪里定义了
sum
用于你的方法
addArray
?另一方面,Ruby中枚举x的
语法并不是真正的惯例,甚至根据语言开发人员的说法,只是出于遗留的原因仍然存在于语言中<代码>数组。每个
都是执行此操作的“标准方式”。还请注意,for语法处理范围的方式与普通块不同。您会问“这个思维过程有什么问题?”这不是工作原理。你需要告诉我们出了什么问题,然后我们可以帮你解决。你收到错误信息了吗?如果是,它说什么,它发生在哪一行?你得到的结果不是你期望的结果吗?如果是,你期望得到什么结果?为什么?你得到了什么结果?为什么结果不是正确的?你正在观察的行为不是你期望的行为吗?如果是的话,你期望什么样的行为,为什么,你会观察到什么样的行为,为什么这种行为不是正确的?啊。非常感谢。我以为我是用“+=”来定义它的。谢谢,自2.4版以来,
sum
方法是用Ruby(非Rails)编写的。谢谢@steenslag-已经更新以反映这一点。你是否像我所认为的那样检查了一下,尽管一定是看错了文件:)@rob-你最后做了什么?这有帮助吗?
def addArray(array)
  array.sum
end