From: "Игорь Пятчиц via ruby-core" Date: 2023-10-03T22:52:28+06:00 Subject: [ruby-core:114944] Re: [Ruby master Bug#19910] Set#delete_if behavior inconsistent with Array/Hash --===============0717788051295762759== Content-Type: multipart/alternative; boundary="000000000000f674900606d2b73d" --000000000000f674900606d2b73d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable =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} > # > ``` > > 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/ > --000000000000f674900606d2b73d Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
=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, segiddins (Samuel Giddins) via ruby-core <= ;ruby-core@ml.ruby-lang.org>:
Issue #1= 9910 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)
=C2=A0 i =3D 0
=C2=A0 collection.delete_if do
=C2=A0 =C2=A0 i +=3D 1
=C2=A0 =C2=A0 raise ArgumentError if i =3D=3D 6
=C2=A0 =C2=A0 i.odd?
=C2=A0 end
rescue ArgumentError
=C2=A0 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 `Se= t`, no elements are deleted (due to the implementation that builds up an in= termediary list of elements to delete, then removes them from the underlyin= g hash afterwards). It would be very helpful if `Set#delete_if` behaved con= sistently with other core collection types



--
https://bugs.ruby-lang.org/
=C2=A0______________________________________________
=C2=A0ruby-core mailing list -- ruby-core@ml.ruby-lang.org
=C2=A0To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
=C2=A0ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.o= rg/
--000000000000f674900606d2b73d-- --===============0717788051295762759== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ______________________________________________ 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/ --===============0717788051295762759==--