ruby meta: Class.superclass.class == Класс

#ruby #oop #metaprogramming

#ruby #ооп #метапрограммирование

Вопрос:

 irb(main):101:0> Class.superclass
=> Module
irb(main):102:0> Class.superclass.class
=> Class
irb(main):103:0> Class.superclass.class == Class
=> true
 

По наследованию, класс < Модуль < Объект < Базовый объект
По метаклассу (или любому другому термину?), Class, Module, Object и BasicObject являются экземплярами Class .

 irb(main):109:0> Module.class
=> Class
irb(main):172:0> Object.class
=> Class
irb(main):173:0> BasicObject.class
=> Class
irb(main):174:0> Class.class
=> Class
 

Как понять эту связь между классом и классом, модулем, объектом, базовым объектом?
Я прочитал некоторое обсуждение метапрограммирования для ruby, но любой ресурс, обсуждающий этот конкретный вопрос, пожалуйста?

Спасибо.

Ответ №1:

Я думаю, что сначала это может вас смутить, но после того, как вы это получите, вы ясно увидите разницу. Я бы посоветовал посмотреть эти ресурсы:

Комментарии:

1. 1, последняя ссылка — это та, которую я всегда рекомендую для понимания объектной модели Ruby.

2. для ссылки на Дейва Томаса это видео полностью прояснило все для меня. Только что просмотрел это дважды

Ответ №2:

Вот видео-доклад о внутренностях Ruby. Это стоит посмотреть и может прояснить некоторые вещи.

Ответ №3:

Это действительно интересный вопрос. Вот ссылка на книгу, которая помогла мне четко понять это:
Метапрограммирование Ruby