我有这样的代码:
array = [100, 90, 120, 100, 110]
array.each_with_index.map do |v, i|
next if i == array.size - 1
array[i+1] - v
end
我认为如果我能这样写的话会更好:
array = [100, 90, 120, 100, 110]
array.each_with_index.map do |v, i|
next if i == _.size - 1
_[i+1] - v
end
所以我想知道在Enumerator块中是否有一个表示数组本身的特殊变量。
有人知道吗?
答案 0 :(得分:4)
我认为您正在寻找的是使用each_cons
,它为每个连续元素数组迭代给定的块:
array.each_cons(2).map { |a, b| a - b }
# => [10, -30, 20, -10]
答案 1 :(得分:0)
Ruby具有块范围,这意味着,您在do/end
块中定义的任何新变量将仅在该范围内,并且在其他任何位置都不可访问。在IRB中,_ has a special meaning,这是执行的最后一个表达式的值。但是,在执行Ruby程序时并非如此。你可以做的是在块本身内部定义一个临时_变量,它将保存对数组的引用:
arr = [1,2,3]
arr.each do |x|
_ = arr
p _ #=> will print [1,2,3] 3 times
end
p _ #=> undefined local variable
除此之外,我考虑使用猴子修补Array
,但这是一项危险的操作。但是,大多数时候会出现类似这样的问题,如果你能更好地了解自己想要实现的目标,那么解决方案比这些问题更简单。