#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:
Я думаю, что сначала это может вас смутить, но после того, как вы это получите, вы ясно увидите разницу. Я бы посоветовал посмотреть эти ресурсы:
- Объектная модель Ruby от Дэйва Томаса
- Объектная модель Ruby и метапрограммирование Дэйва Томаса
- Объектная модель Ruby — структура и семантика
Комментарии:
1. 1, последняя ссылка — это та, которую я всегда рекомендую для понимания объектной модели Ruby.
2. для ссылки на Дейва Томаса это видео полностью прояснило все для меня. Только что просмотрел это дважды
Ответ №2:
Вот видео-доклад о внутренностях Ruby. Это стоит посмотреть и может прояснить некоторые вещи.
Ответ №3:
Это действительно интересный вопрос. Вот ссылка на книгу, которая помогла мне четко понять это:
Метапрограммирование Ruby