阵列考虑摘录:修改期间迭代
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
打印时的元素,而5
是打印时位置2
上的元素)。
另一种方法是打印1
,2
,3
。
这是行为的目的?或者它只是实现细节,并且有可能重新实现Array
的某一天,并且此行为可能会更改?
当你从你正在枚举的集合中移除元素时,会发生这种事情。相反,'a.dup.each {| e |转变 ; p e; p1}'print'“1 \ n [2,3,4,5 \ n2 \ n [3,4,5] \ n3 \ n [4,5] \ n4 \ n [5]”'。 。 –