Feature #5922

Migrate equal? to identical?

Added by trans (Thomas Sawyer) over 5 years ago. Updated almost 5 years ago.

Target version:


From Ruby docs: "the equal? method should never be overridden by subclasses: it is used to determine object identity (that is, a.equal?(b) iff a is the same object as b)."

I think it would make more sense to name such a method #identical?, since that is what it is doing --comparing identity. Over a sufficient period of time the current use of #equal? can be deprecated and possibly made better use of with a different definition. I realize this is not a minor change. This transition would probably be much like the one from #id to #object_id.

The reason I propose this, and why it is an issue for myself, is in of the design of assertion frameworks. For example, #assert_equal is a comparison of #==, not #equal?. We run into this naming conundrum and end up having to use assertion names that don't correspond well to the names of the underlying comparison. So that's the practical reason. But formally speaking, I think #identical? also better b/c it is more precise.

5922.pdf (73.3 KB) 5922.pdf Migrate equal? to identical? trans (Thomas Sawyer), 07/01/2012 08:48 AM


#1 [ruby-core:42213] Updated by peter_v (Peter Vandenabeele) over 5 years ago


One could also be even more descriptive: "same_object?"

#2 [ruby-core:43107] Updated by kernigh (George Koehler) over 5 years ago

The name of #equal? is part of a pattern.

In Common Lisp:
(eq a b) ; most strict
(eql a b)
(equal a b)
(equalp a b) ; least strict

In Ruby:
a == b # least strict
a.eql? b
a.equal? b # most strict

If #equal? loses its name, the pattern would be less obvious. Also, #eql? would lose its position between #== and #equal?.

If #equal? loses its name, I suggest that #eql? also loses its name.
* #equal? might become #identical? or #same_object?
* #eql? might become #hash_equal?

I guess that #eql? must not lose its name, because too much Ruby code already calls or defines #eql?.

#3 [ruby-core:43914] Updated by mame (Yusuke Endoh) over 5 years ago

  • Status changed from Open to Assigned
  • Assignee set to matz (Yukihiro Matsumoto)

#5 [ruby-core:46076] Updated by mame (Yusuke Endoh) about 5 years ago

Received, thank you!

Yusuke Endoh

#6 [ruby-core:48262] Updated by yhara (Yutaka HARA) almost 5 years ago

Yusuke, do you know if this proposal is accepted as 2.0.0 feature at the Ruby developer meeting?

#7 [ruby-core:48273] Updated by mame (Yusuke Endoh) almost 5 years ago

  • Status changed from Assigned to Rejected

Hello trans and yhara,

2012/10/25 yhara (Yutaka HARA)

Yusuke, do you know if this proposal is accepted as 2.0.0 feature at the Ruby developer meeting?

Oops! I forget to write the result. Very sorry.

This feature request was rejected at the developers' meeting (7/21).

From a philosophical perspective, matz agreed that "identical?" was
more appropriate name.
But from a practical perspective, matz said we never delete "equal?",
and the name "identical?" has been already used, e.g., File#identical?.
So he rejected this proposal.

Yusuke Endoh

#8 [ruby-core:48318] Updated by trans (Thomas Sawyer) almost 5 years ago

Someone else suggested #same? as alternate name.

Seems unfortunate to see a clear improvement held back by tradition alone.

Also available in: Atom PDF