[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 <
ruby-core@ml.ruby-lang.org>:
> 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 -- ruby-core@ml.ruby-lang.org
> To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
> ruby-core info --
> https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.=
org/
>
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/