关于Object.object

    xiaoxiao2024-07-12  108

    Ruby中的Object.object_id是返回一个Fixnum类型的标识符来代表一个对象。没有两个active的对象的object_id是一样的,如: a = " 1.8.6 " b = " 1.8.6 " a.object_id   =>   24393910 b.object_id   =>   24390830     尽管a==b,然而两者的object_id是不同。     但是这里有两种例外情况,对于常量,哪怕你将它赋给不同的变量,它们的object_id是一样的: a = RUBY_VERSION b = RUBY_VERSION a.object_id   =>   21628310 b.object_id   =>   21628310 C="hello"  a=C  b=C  a.object_id =>  24243480  b.object_id =>  24243480          除此之外,对于symbol类型,返回的也将是同一个object_id: a = :name b = :name a.object_id  =>   34258 b.object_id  =>   34258         为什么会出现这种情况?查看源码可知: VALUE rb_obj_id(VALUE obj) {       if  (TYPE(obj)  ==  T_SYMBOL) {         return  (SYM2ID(obj)  *  sizeof(RVALUE)  +  ( 4   <<   2 ))  |  FIXNUM_FLAG;    }     if  (SPECIAL_CONST_P(obj)) {         return  LONG2NUM(( long )obj);    }     return  (VALUE)(( long )obj | FIXNUM_FLAG); }

        Object.object_id方法对这两种情况做了特殊处理,常量和symbol都应当是唯一的。

    文章转自庄周梦蝶  ,原文发布时间2009-05-24

    最新回复(0)