Auszug Betrachten:Modifizieren ein Array während der Iteration
a = [1, 2, 3, 4, 5]
a.each { |e| a.shift ; p e ; p a }
die Ausgänge:
1
[2, 3, 4, 5]
3
[3, 4, 5]
5
[4, 5]
Es offenbart, dass die Umsetzung von each
in Bezug auf einen Index durchgeführt wird (1
ist das Element an der Position 0
wenn gedruckt, 3
ist das Element bei 1
wenn gedruckt, und 5
ist das Element an Position 2
wenn gedruckt). Eine Alternative wäre 1
, 2
, 3
zu drucken.
Ist dieses Verhalten beabsichtigt? Oder ist es nur Implementierungsdetails, und es ist möglich, dass eines Tages Array
wird neu implementiert und dieses Verhalten kann sich ändern?
Diese Art der Sache passiert, wenn Sie Elemente aus einer Sammlung entfernen, über die Sie auflisten. Im Gegensatz dazu ist "a.dup.each {| e | eine Schicht ; p e; p a} 'druckt '" 1 \ n [2, 3, 4, 5 \ n2 \ n [3, 4, 5] \ n3 \ n [4, 5] \ n4 \ n [5] "'. . –