Ruby 使用实例变量进行计算

Ruby 使用实例变量进行计算,ruby,instance-variables,Ruby,Instance Variables,所以我想用实例变量做一些类似的事情 @array.each {|x,y|x+y} 它似乎不起作用,我想知道这是用于实例变量的正确语法,还是应该是这样的 @array.each |x, y| x+y 或 我是否需要为此使用收益率 块中应该只有一个变量: @array.each { |x| ... } 方法每个将逐个遍历数组。一般来说,局部变量和实例变量之间没有区别,只是范围不同。你可以用同样的方法 您的代码的问题在于,对于数组,没有每个数组都有两个变量(x和y) 您可以执行以下任一操作: t

所以我想用实例变量做一些类似的事情

@array.each {|x,y|x+y}
它似乎不起作用,我想知道这是用于实例变量的正确语法,还是应该是这样的

@array.each |x, y| x+y


我是否需要为此使用
收益率

块中应该只有一个变量:

@array.each { |x| ... }

方法
每个
将逐个遍历数组。

一般来说,局部变量和实例变量之间没有区别,只是范围不同。你可以用同样的方法

您的代码的问题在于,对于数组,没有每个数组都有两个变量(
x
y

您可以执行以下任一操作:

total = 0
@array.each { |x| total += x }
或:

或:

也可以这样写:

total = @array.inject(:+)

您正在寻找
inject

@array.inject(:+)

如果你想对元素求和(这似乎是你的目的)


您希望发生什么?一般来说,局部变量和实例变量之间没有区别,只是范围不同。你可以用同样的方法使用它。你很可能是指
inject
:@array.inject(0){| x,y | x+y}产生数组中所有元素的总和。它不起作用…我希望它在数组中的元素处添加第一个元素到seocond,依此类推,在添加所有元素之前,实际上不需要为inject设置初始值
tot
将自动加载第一个数组元素,并且该块将为每个剩余的数组元素执行。您也不需要带有inject的
+=
。块计算的结果将成为下一个memo值,因此
@array.inject{| tot,x | tot+x}
就足够了。inject可以工作,我可以使用您列出的语法来解决我遇到的另一个问题,因为它的目标是处理每个实例。
total = @array.inject { |tot, x| tot += x }
total = @array.inject(:+)
@array.inject(:+)
@array.inject(:+)