==和equal?是在BasicObject定义的
eql?是在Object中定义的
默认情况下这个三个方法都是在对象水平进行比较,即当比较的两个对象具有相同的内存时返回true。
按照ruby文档 equal?是不应该被override的。
像Fixnum String等类对== eql?进行了overrride,所以才会有如下情况:
1 == 1.0 # => true
1.eql? 1.0 # => false
1.equal? 1.0 #=> false
"foo" == "foo" #=>true
"foo".eql? "foo" #=>true
"foo" .equal? "foo" #=>false
class Name; end
n1 = Name.new
n2 = Name.new
n1 == n2 #=> false
n1.eql? n2 #=> false
n1.equal? n2 #=>false