奇怪的ruby for循环行为(为什么这样做有效)

奇怪的ruby for循环行为(为什么这样做有效),ruby,for-loop,Ruby,For Loop,这是可行的,我想知道为什么。有什么解释吗?如果我用每个而不是for/in重写这个,它会是这样的: def reverse(ary) result = [] for result[0,0] in ary end result end assert_equal ["baz", "bar", "foo"], reverse(["foo", "bar", "baz"]) 对于b中的a基本上是说,取数组b中的每个项,并将其分配给表达式a。因此,当它不是一个简单的变量时,一些神奇的事情发

这是可行的,我想知道为什么。有什么解释吗?

如果我用
每个
而不是
for/in
重写这个,它会是这样的:

def reverse(ary)
  result = []
  for result[0,0] in ary
  end
  result
end

assert_equal ["baz", "bar", "foo"], reverse(["foo", "bar", "baz"])
对于b中的a
基本上是说,取数组
b
中的每个项,并将其分配给表达式
a
。因此,当它不是一个简单的变量时,一些神奇的事情发生了

数组[index,length]=something
语法允许替换多个项,甚至0个项。因此,
ari[0,0]=item
表示在索引0处插入
item
,替换零项。这基本上是一个
反移位操作



但实际上,只需将
each
方法与块一起使用即可。一个没有主体改变状态的for循环必须是最迟钝、最难理解的东西之一,它不能达到你第一眼所期望的效果<代码>每个
提供的疯狂惊喜要少得多。

您将值放在结果的第一个位置。假设我们拥有阵列:
a=[“baz”、“bar”、“foo”]

因此
a[0,0]=5将使
a
等于
[5,“baz”,“bar”,“foo”]


由于迭代整个数组,因此在移动现有元素的同时将每个元素插入结果数组的开头,从而反转原始元素。

这完全是迟钝的,我永远不会这样做。我在一个ruby拼图网站上看到了它,找到了答案,但我一辈子都不明白它为什么会起作用。不过,这是一个很好的解释。非常感谢。
def reverse(ary)
  result = []

  # for result[0,0] in ary
  ary.each do |item|
    result[0, 0] = item
  end

  result
end