[ruby-core:114944] Re: [Ruby master Bug#19910] Set#delete_if behavior inconsistent with Array/Hash
From:
Игорь Пятчиц via ruby-core <ruby-core@...>
Date:
2023-10-03 16:52:28 UTC
List:
ruby-core #114944
=F0=9F=98=89 =D0=B2=D1=82, 3 =D0=BE=D0=BA=D1=82. 2023=E2=80=AF=D0=B3. =D0=B2 03:05, segi= ddins (Samuel Giddins) via ruby-core < [email protected]>: > Issue #19910 has been reported by segiddins (Samuel Giddins). > > ---------------------------------------- > Bug #19910: Set#delete_if behavior inconsistent with Array/Hash > https://bugs.ruby-lang.org/issues/19910 > > * Author: segiddins (Samuel Giddins) > * Status: Open > * Priority: Normal > * ruby -v: 3.2.2 > * Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN > ---------------------------------------- > Given the following script: > > ```ruby > #!/usr/bin/env ruby > > require 'set' > > def enum(collection) > i =3D 0 > collection.delete_if do > i +=3D 1 > raise ArgumentError if i =3D=3D 6 > i.odd? > end > rescue ArgumentError > return collection > end > > pp enum([0, 1, 2, 3, 4, 5, 6, 7]) > pp enum([0, 1, 2, 3, 4, 5, 6, 7].to_h { [_1, _1] }) > pp enum([0, 1, 2, 3, 4, 5, 6, 7].to_set) > ``` > > It results in: > > ``` > [1, 3, 5, 6, 7] > {1=3D>1, 3=3D>3, 5=3D>5, 6=3D>6, 7=3D>7} > #<Set: {0, 1, 2, 3, 4, 5, 6, 7}> > ``` > > As you can see, when an exception is raise inside `delete_if` on > Hash/Array, the already-considered elements are still removed from the > array. For `Set`, no elements are deleted (due to the implementation that > builds up an intermediary list of elements to delete, then removes them > from the underlying hash afterwards). It would be very helpful if > `Set#delete_if` behaved consistently with other core collection types > > > > -- > https://bugs.ruby-lang.org/ > ______________________________________________ > ruby-core mailing list -- [email protected] > To unsubscribe send an email to [email protected] > ruby-core info -- > https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.= org/ > ______________________________________________ ruby-core mailing list -- [email protected] To unsubscribe send an email to [email protected] ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/