【发布时间】:2017-03-04 10:03:00
【问题描述】:
考虑摘录:
a = [1, 2, 3, 4, 5]
a.each { |e| a.shift ; p e ; p a }
输出:
1
[2, 3, 4, 5]
3
[3, 4, 5]
5
[4, 5]
它揭示了each的实现是根据索引完成的(1是打印时位于0位置的元素,3是打印时位于1的元素,@987654328 @ 是打印时位于2 位置的元素。
另一种方法是打印1、2、3。
这种行为是有意的吗?或者它只是实现细节,有可能有一天Array 被重新实现并且这种行为可能会改变?
【问题讨论】:
-
当您从要枚举的集合中删除元素时,就会发生这种情况。相比之下,
a.dup.each{ |e| a.shift ; p e ; p a }打印"1\n[2, 3, 4, 5\n2\n[3, 4, 5]\n3\n[4, 5]\n4\n[5]"。 .
标签: arrays ruby iteration immutability