Pattern matching for Set
Set does not respond to
deconstruct. Shouldn't we implement it using
require 'set' case Set[1, 2, 3] in [1, 2, 3] p "match" else p "no match" end # => "no match", should be "match"
Updated by marcandre (Marc-Andre Lafortune) 2 months ago
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)...
Updated by jeremyevans0 (Jeremy Evans) 2 months ago
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