我正在学习Ruby。我收到了O'Reilly的书“红宝石程序设计语言”,其中明确指出:
“Object类实现了哈希方法,只返回一个对象的ID。”
我也在其他书籍中看到了这个断言:http://my.safaribooksonline.com/book/web-development/ruby/9780321700308/create-classes-that-understand-equality/ch12lev1sec8
但是当我运行此代码时,这两行不会生成相同的数字:
myObject = Object.new
puts myObject.hash
puts myObject.object_id
那是什么交易?我正在运行Ruby 1.9.3。
答案 0 :(得分:1)
Object实现哈希object_id
。该值不是object_id
,但object_id
是哈希函数的输入。
通过https://github.com/ruby/ruby/blob/trunk/object.c#L110
VALUE
rb_obj_hash(VALUE obj)
{
VALUE oid = rb_obj_id(obj);
st_index_t h = rb_hash_end(rb_hash_start(NUM2LONG(oid)));
return LONG2FIX(h);
}
答案 1 :(得分:1)
返回 obj的整数标识符。对于给定对象的所有id调用都将返回相同的数字,并且没有两个活动对象将共享id。
为此对象生成 Fixnum哈希值。此函数必须具有a.eql?(b)暗示a.hash == b.hash的属性。散列值由Hash类使用。任何超出Fixnum容量的哈希值在被使用之前都将被截断。
恢复:不生成整数标识符哈希。
答案 2 :(得分:0)