Issue #14263 has been updated by marcandre (Marc-Andre Lafortune).


> If two instances are .eql? but their hashes are not

Then `eql?` or `hash` are ill-defined. The definition of `hash` is that any two objects that are `eql?` must have identical `hash` values. Note that objects that are not `eql?` may also have identical `hash` values, although it is preferable when they don't.

----------------------------------------
Bug #14263: Array Intersection does not seem to use hash
https://bugs.ruby-lang.org/issues/14263#change-69115

* Author: gkellogg (Gregg Kellogg)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 2.5.0
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
According to the documentation for Array#&, comparison is done using hash and eql? However, this does not seem to be the case in 2.5.0.

If two instances are .eql? but their hashes are not, an array & should be empty:

~~~ ruby
([Var.new('a')] & [Var.new('b')]).empty?

~~~

This test works in 2.4.2 (and all earlier versions), but fails in 2.5.0. See attached script.

---Files--------------------------------
array_intersection.rb (535 Bytes)


-- 
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>