Подтвердить что ты не робот

В Ruby почему nil.id возвращает 4?

Это прослушивание меня довольно долгое время.

>> nil.id
(irb):2: warning: Object#id will be deprecated; use Object#object_id
=> 4

Почему nil.id будет 4? (или nil.object_id, если вы хотите быть разборчивыми в отношении устареваний)

4b9b3361

Ответ 1

Это потому, что nil - это объект, созданный, когда язык инициализируется, и этот идентификатор объекта всегда равен 4.

Для получения дополнительной информации о том, почему идентификатор 4, см. это сообщение в блоге.

Ответ 2

Я всегда считал, что это крутое пасхальное яйцо: в Японии 4 - это число смерти.

Ответ 3

Это происходит потому, что идентификатор каждого объекта должен был каким-то образом быть представлен в интерпретаторе C Ruby. Числа получили сопоставление (число * 2) +1, правда получилось 0, фальшь получила 2 и у ноль осталось 4. Это просто странная проблема с реализацией или непроницаемая абстракция. Вы не должны беспокоиться об этом, если не хотите писать интерпретатор Ruby.

Ответ 4

Если вы пытаетесь это сделать в irb, вы получаете 4

irb
>> NIL.id
(irb):7: warning: Object#id will be deprecated; use Object#object_id
=> 4

В рубине японцы, установленные на нулевых методах, называют это 4 стандартным языком, который они устанавливают 4 как "Опасный" ИЛИ "Смерть"