* [ruby-core:114943] [Ruby master Bug#19910] Set#delete_if behavior inconsistent with Array/Hash
@ 2023-10-02 21:05 segiddins (Samuel Giddins) via ruby-core
2023-10-03 16:52 ` [ruby-core:114944] " Игорь Пятчиц via ruby-core
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: segiddins (Samuel Giddins) via ruby-core @ 2023-10-02 21:05 UTC (permalink / raw
To: ruby-core; +Cc: segiddins (Samuel Giddins)
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 = 0
collection.delete_if do
i += 1
raise ArgumentError if i == 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=>1, 3=>3, 5=>5, 6=>6, 7=>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/
^ permalink raw reply [flat|nested] 4+ messages in thread
* [ruby-core:114944] Re: [Ruby master Bug#19910] Set#delete_if behavior inconsistent with Array/Hash
2023-10-02 21:05 [ruby-core:114943] [Ruby master Bug#19910] Set#delete_if behavior inconsistent with Array/Hash segiddins (Samuel Giddins) via ruby-core
@ 2023-10-03 16:52 ` Игорь Пятчиц via ruby-core
2023-10-04 8:22 ` [ruby-core:114946] " stevegeek (Stephen Ierodiaconou) via ruby-core
2023-10-13 4:42 ` [ruby-core:115034] " the_spectator (Akshay Birajdar) via ruby-core
2 siblings, 0 replies; 4+ messages in thread
From: Игорь Пятчиц via ruby-core @ 2023-10-03 16:52 UTC (permalink / raw
To: Ruby developers
Cc: Игорь Пятчиц
[-- Attachment #1.1: Type: text/plain, Size: 1870 bytes --]
😉
вт, 3 окт. 2023 г. в 03:05, segiddins (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 = 0
> collection.delete_if do
> i += 1
> raise ArgumentError if i == 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=>1, 3=>3, 5=>5, 6=>6, 7=>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/
>
[-- Attachment #1.2: Type: text/html, Size: 2716 bytes --]
[-- Attachment #2: Type: text/plain, Size: 264 bytes --]
______________________________________________
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/
^ permalink raw reply [flat|nested] 4+ messages in thread
* [ruby-core:114946] [Ruby master Bug#19910] Set#delete_if behavior inconsistent with Array/Hash
2023-10-02 21:05 [ruby-core:114943] [Ruby master Bug#19910] Set#delete_if behavior inconsistent with Array/Hash segiddins (Samuel Giddins) via ruby-core
2023-10-03 16:52 ` [ruby-core:114944] " Игорь Пятчиц via ruby-core
@ 2023-10-04 8:22 ` stevegeek (Stephen Ierodiaconou) via ruby-core
2023-10-13 4:42 ` [ruby-core:115034] " the_spectator (Akshay Birajdar) via ruby-core
2 siblings, 0 replies; 4+ messages in thread
From: stevegeek (Stephen Ierodiaconou) via ruby-core @ 2023-10-04 8:22 UTC (permalink / raw
To: ruby-core; +Cc: stevegeek (Stephen Ierodiaconou)
Issue #19910 has been updated by stevegeek (Stephen Ierodiaconou).
I was just looking at this, and it seems like the behaviour used to be as you expected but changed in v2.1, https://github.com/ruby/ruby/commit/2849ee5d18360f26b55643a2643a1c597376865d
----------------------------------------
Bug #19910: Set#delete_if behavior inconsistent with Array/Hash
https://bugs.ruby-lang.org/issues/19910#change-104817
* 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 = 0
collection.delete_if do
i += 1
raise ArgumentError if i == 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=>1, 3=>3, 5=>5, 6=>6, 7=>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/
^ permalink raw reply [flat|nested] 4+ messages in thread
* [ruby-core:115034] [Ruby master Bug#19910] Set#delete_if behavior inconsistent with Array/Hash
2023-10-02 21:05 [ruby-core:114943] [Ruby master Bug#19910] Set#delete_if behavior inconsistent with Array/Hash segiddins (Samuel Giddins) via ruby-core
2023-10-03 16:52 ` [ruby-core:114944] " Игорь Пятчиц via ruby-core
2023-10-04 8:22 ` [ruby-core:114946] " stevegeek (Stephen Ierodiaconou) via ruby-core
@ 2023-10-13 4:42 ` the_spectator (Akshay Birajdar) via ruby-core
2 siblings, 0 replies; 4+ messages in thread
From: the_spectator (Akshay Birajdar) via ruby-core @ 2023-10-13 4:42 UTC (permalink / raw
To: ruby-core; +Cc: the_spectator (Akshay Birajdar)
Issue #19910 has been updated by the_spectator (Akshay Birajdar).
Took a stab at it in https://github.com/ruby/ruby/pull/8642
----------------------------------------
Bug #19910: Set#delete_if behavior inconsistent with Array/Hash
https://bugs.ruby-lang.org/issues/19910#change-104908
* 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 = 0
collection.delete_if do
i += 1
raise ArgumentError if i == 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=>1, 3=>3, 5=>5, 6=>6, 7=>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/
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-10-13 4:42 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-02 21:05 [ruby-core:114943] [Ruby master Bug#19910] Set#delete_if behavior inconsistent with Array/Hash segiddins (Samuel Giddins) via ruby-core
2023-10-03 16:52 ` [ruby-core:114944] " Игорь Пятчиц via ruby-core
2023-10-04 8:22 ` [ruby-core:114946] " stevegeek (Stephen Ierodiaconou) via ruby-core
2023-10-13 4:42 ` [ruby-core:115034] " the_spectator (Akshay Birajdar) via ruby-core
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).