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

匿名 · 2012年11月08日 · 最后由 wyh770604 回复于 2012年11月12日 · 2907 次阅读

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

匿名 #4 2012年11月09日

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

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

匿名 #6 2012年11月12日

#5 楼 @halfelf very good

需要 登录 后方可回复, 如果你还没有账号请 注册新账号