Я использую Ruby 2.2.2.Ruby, hash and object_id
irb(main):002:0> str = "abc"
=> "abc"
irb(main):003:0> str2 = "abc"
=> "abc"
irb(main):004:0> str.hash
=> -340360941
irb(main):005:0> str2.hash
=> -340360941
irb(main):006:0> str.object_id
=> 3702564
irb(main):007:0> str2.object_id
=> 24864312
irb(main):009:0> str == str2
=> true
irb(main):010:0> str.eql? str2
=> true
str
Почему и str2
имеют тот же хэш, но разные object_id
? Согласно документам hash и object_id, ни один активный объект не будет делиться идентификатором, поэтому str
и str2
имеют разные object_id
, но как их понимать hash
такие же?
Не могли бы вы рассказать об этом? Я предполагаю, что "abc"
занимают только одно пространство памяти, и оба str
и str2
относятся к тому же пространству памяти.
Если кто-то может объяснить это как распределить память, это будет здорово.
Две различные объекты, равные должны иметь одинаковое значение хеш-функции. – Santhosh
@Santhosh Полностью согласен. Не могли бы вы объяснить разницу между 'hash' и' object_id'? – coderz