Issue #22021 has been updated by Eregon (Benoit Daloze). IMO it's not reasonable for `Array#delete_if` to do anything else than what it already does. How can `Array#delete_if` know which element you deleted and whether it should delete or not? The block returns true for the second 2nd call, so it should delete the 2nd element after that block call (unless the Array#size < index when it's noop then). ---------------------------------------- Bug #22021: Array#delete_if may delete wrong object if array has been altered already https://bugs.ruby-lang.org/issues/22021#change-117169 * Author: chucke (Tiago Cardoso) * Status: Open * ruby -v: 4.0.2 * Backport: 3.3: UNKNOWN, 3.4: UNKNOWN, 4.0: UNKNOWN ---------------------------------------- The simplest example I can come up with: ```ruby $ar = ar = [1, 2, 3, 4, 5] def del(i) $ar.delete(i) end ar.delete_if { |e| e == 2 ? (del(e) && true) : false } p ar #=> [1, 4, 5], and it should be [1, 3, 4, 5] ``` -- https://bugs.ruby-lang.org/