Issue #5752 has been updated by Akira Tanaka.

Related to Bug #10714: Array#reject! nonlinear performance problem added

----------------------------------------
Bug #5752: Array#delete_if side effects due to changeset r32360
https://bugs.ruby-lang.org/issues/5752#change-50904

* Author: Thomas Leitner
* Status: Closed
* Priority: Normal
* Assignee: 
* Category: doc
* Target version: 1.9.3
* ruby -v: ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-linux]
* Backport: 
----------------------------------------
It seems that the changeset r32360 introduced another side effect. Here are two IRB sessions, one in ruby-1.9.2-p136 and the other in ruby-1.9.3-p0:

ruby-1.9.2-p136 :001 > x = [1,2,3,4,5,6,7,8,9]
 => [1, 2, 3, 4, 5, 6, 7, 8, 9] 
ruby-1.9.2-p136 :002 > x.delete_if {|i| i == x[i-1]}
 => [] 

ruby-1.9.3-p0 :001 > x = [1,2,3,4,5,6,7,8,9]
 => [1, 2, 3, 4, 5, 6, 7, 8, 9] 
ruby-1.9.3-p0 :002 > x.delete_if {|i| i == x[i-1]}
 => [2, 3, 4, 5, 6, 7, 8, 9] 

If this is indeed the intended behaviour, it should probably be documented clearly that the array is changed instantly every time the block is called and not after the iteration is over.

---Files--------------------------------
array.c.patch (719 Bytes)


-- 
https://bugs.ruby-lang.org/