Implement case equality test for Set#===
In keeping with other class semantics, Set should implement an inclusion / membership test for #===.
For example with Range:
(1..3) === 2 #=> true
Set[1, 2, 3] === 2 #=> true
Set[1, 2, 3] === 2 #=> false
Updated by davidarnold (David Arnold) over 1 year ago
I expect Set to act almost like Array [...]
But why? Aside from both being collections, there is no connection. Ruby's Set isn't even implemented with an Array.
The core mathematical definition of Set is based on element membership. All of the characteristic operations on sets (intersection, union, difference, etc) are derived based on element membership. When #=== has the common semantics in Ruby of membership, why should the one class, which is probably most closely tied to the notion of membership, not implement this operator?
FWIW, I would not be opposed to Array implementing #=== as a membership test either, but this is not a feature request for Array.
- "Set theory begins with a fundamental binary relation between an object o and a set A. If o is a member (or element) of A, the notation o ∈ A is used." https://en.wikipedia.org/wiki/Set_theory
Updated by knu (Akinori MUSHA) over 1 year ago
I don't remember but I guess I didn't define
Set#=== probably because Array didn't, but I agree
Set#=== could be useful and intuitive, so I've merged your PR with a slight modification (alias to save an extra method call) and a test in addition to the specs. Thanks!