Указывает ли метод ruby ​​object_id на ячейку памяти? - PullRequest
8 голосов
/ 20 марта 2009

Или этот метод просто указывает уникальное целое число, которое имеет каждый объект?

Ответы [ 5 ]

6 голосов
/ 20 марта 2009

Это комбинация многих параметров, значения, типа объекта, места в памяти.
Подробнее можно прочитать здесь

4 голосов
/ 20 марта 2009

Это не прямая ссылка на область памяти, и «кодировка» является специфической для конкретной реализации Ruby. Если вы можете читать код на языке C, вам может показаться полезным изучить методы rb_obj_id и id2ref в gc.c в источнике Ruby 1.8.6. Вы также можете прочитать больше о «кодировании» в разделе «Объекты, встроенные в VALUE» в частичном переводе главы Ruby Hacking Guide 2 .

3 голосов
/ 16 ноября 2010

Стоит отметить, что вы можете выполнить обратный поиск идентификаторов объектов, используя:

ObjectSpace._id2ref(object_id)

Например:

ObjectSpace._id2ref(0) #=> false
ObjectSpace._id2ref(1) #=> 0
ObjectSpace._id2ref(2) #=> true
ObjectSpace._id2ref(3) #=> 1
ObjectSpace._id2ref(4) #=> nil
1 голос
/ 20 марта 2009

В "нормальном" рубине (MRI 1.8.x и 1.9.x) это просто уникальное значение.

Это также относится и к IronRuby

1 голос
/ 20 марта 2009

ну, это зависит от того, что вы подразумеваете под "рубином";) Насколько я могу судить, в jruby это просто уникальное целое число.

Кроме того, такие вещи, как числа, не являются местом памяти. Я забыл все детали и уверен, что кто-то передаст их вам.

irb(main):020:0> 1.object_id
=> 3 
irb(main):021:0> (2-1).object_id
=> 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...