>> nil.id
(irb):2: warning: Object#id will be deprecated; use Object#object_id
=> 4
Почему nil.id будет 4? (или nil.object_id, если вы хотите быть разборчивыми в отношении устареваний)
Ответ 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 как "Опасный" ИЛИ "Смерть"