Как работает назначение object_id?

Я играю с Ruby's .object_id и заметил, что в нескольких последовательных сеансах irb я получаю такие же результаты:

false.object_id // 0
true.object_id // 2
nil.object_id // 4
100.object_id // 201

Фактически, каждый целое число object_id кажется быть ((значение * 2) + 1).

С другой стороны, object_id данной строки никогда не будет прежним после выхода и повторного запуска irb.

Это вызывает у меня несколько вопросов:

  1. существует известная схема, по которой определяются определенные object_id ? Являются ли другие в основном случайными?
  2. Идентификаторы true, false и nil не являются последовательными. Есть ли способ спросить, какой объект представлен данным идентификатором? (Мне любопытно, к чему привязаны другие однозначные и идентификаторы.)
  3. Не могли бы вы (не то, что вы должны) написать запутанный Ruby, где вы используете идентификаторы известных объектов для ссылки на объекты, не называя их, например: "

    img { color: hsla(0,100%,50%,0.2) }
    

    Есть ли что-то вроде img {opacity: 1} , которое позволяет определять значения hsl для изображения?

5
задан kalyanji 7 August 2010 в 12:40
поделиться