What's the difference between equal?, eql?, ===, and ==?
equal 比较对象是否是同一个对象,eql?比较两个值是不是完全相等
==是值相等,如 1==1.0(true),eql?要求类型和值都相等,那么 1.eql?(1.0) 就是 false equal?是两个对象的 ObjectID 一样,即引用同一个对象。 ===一般会在不同类型中重载,惯例上是某种匹配。隐式的===很多,如 case 后的表达式和其 when 子句后面的表达式,还有异常和其处理的 rescue 后面的表达式。
VALUE rb_equal(VALUE obj1, VALUE obj2) { VALUE result; if (obj1 == obj2) return Qtrue; result = rb_funcall(obj1, id_eq, 1, obj2); if (RTEST(result)) return Qtrue; return Qfalse; }
#2 楼 @halfelf === 一般什么情况下使用?直接举个列子
如(1..10) === 5是 true,(1..10)===55是 false。直接找个电子书搜===比在这里问好多了
(1..10) === 5
(1..10)===55
#5 楼 @halfelf very good