Issue #12684 has been updated by Eregon (Benoit Daloze).


@nobu Any update on this? I think your patch is OK.

----------------------------------------
Bug #12684: Delegator#eql? missing
https://bugs.ruby-lang.org/issues/12684#change-65226

* Author: carsonreinke (Carson Reinke)
* Status: Open
* Priority: Normal
* Assignee: nobu (Nobuyoshi Nakada)
* Target version: 
* ruby -v: 2.3.1
* Backport: 2.2: REQUIRED, 2.3: REQUIRED, 2.4: REQUIRED
----------------------------------------
There is some strange behavior because Delegator is missing an alias of #eql? to #==

```
2.3.1 :001 > s = 'test'
 => "test" 
2.3.1 :002 > d = SimpleDelegator.new(s)
 => "test" 
2.3.1 :003 > d.eql?(d)
 => false 
2.3.1 :004 > d == d
 => true 
2.3.1 :005 > d.hash == d.hash
 => true
``` 

I understand that `Delegator` is a `BasicObject` and that does not define #eql? method, but this method is being used by `Array`r.

For example,

```
2.3.1 :001 > s = 'test'
 => "test" 
2.3.1 :002 > a = [SimpleDelegator.new(s), SimpleDelegator.new(s)]
 => ["test", "test"] 
2.3.1 :003 > a[0] == a[1]
 => true 
2.3.1 :004 > a.uniq()
 => ["test", "test"]
2.3.1 :005 > a[0].hash == a[1].hash
 => true
``` 

Kind of strange behavior, especially reading the documentation.

Now maybe, `Array#uniq` should be changed to use `#==` instead of `#eql?`



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