Ruby What's the difference between equal?, eql?, ===, and ==?

Unknow user · November 08, 2012 · Last by wyh770604 replied at November 12, 2012 · 2899 hits

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

Unknow user #4 November 09, 2012

#2 楼 @halfelf === 一般什么情况下使用?直接举个列子

(1..10) === 5是 true,(1..10)===55是 false。直接找个电子书搜===比在这里问好多了

Unknow user #6 November 12, 2012

#5 楼 @halfelf very good

You need to Sign in before reply, if you don't have an account, please Sign up first.