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(:+)