Feature #15918
open
Added by marcandre (Marc-Andre Lafortune) over 5 years ago.
Updated 8 months ago.
Description
Currently, Set
does not respond to deconstruct
. Shouldn't we implement it using to_a
?
require 'set'
case Set[1, 2, 3]
in [1, 2, 3]
p "match"
else
p "no match"
end
# => "no match", should be "match"
Did you mean in Set[1, 2, 3]
?
Eregon (Benoit Daloze) wrote:
Did you mean in Set[1, 2, 3]
?
I didn't, but it should match too; it's the same as my example but with the added constraint that the object should be a descendant a Set
. Note that in Set[1, 2, 3]
does not call Set.[](1, 2, 3)
...
Sets are supposed to be unordered (any ordering is an implementation detail). If Set[1, 2, 3]
matches in your example, so should Set[3, 2, 1]
, since Set[1, 2, 3] == Set[3, 2, 1]
. We could attempt to sort the elements of the set before pattern matching, but some sets contain unsortable elements (e.g. elements of different types). If pattern matching can work correctly when using in Set[...]
, then maybe this would be desirable, but I'm not sure if that is possible.
To answer your question, in my opinion, yes, we shouldn't implement deconstruct
using to_a
.
- Tracker changed from Bug to Feature
- Backport deleted (
2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: UNKNOWN)
- Assignee set to ktsj (Kazuki Tsujimoto)
- Status changed from Open to Assigned
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0Like0Like0