Issue #13801 has been updated by davidarnold (David Arnold).


> 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[1].  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.

1. "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

----------------------------------------
Feature #13801: Implement case equality test for Set#===
https://bugs.ruby-lang.org/issues/13801#change-66289

* Author: davidarnold (David Arnold)
* Status: Open
* Priority: Normal
* Assignee: knu (Akinori MUSHA)
* Target version: 
----------------------------------------
In keeping with other class semantics, Set should implement an inclusion / membership test for #===.

For example with Range:

~~~ ruby
(1..3) === 2 #=> true
~~~

Desired behavior:

~~~ ruby
Set[1, 2, 3] === 2 #=> true
~~~

Current behavior:

~~~ ruby
Set[1, 2, 3] === 2 #=> false
~~~




-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>