Как стать автором
Обновить

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

Благодаря таким статьям, от руби теряется немного волшебства :) Впрочем, это прекрасно!
А по-моему, наоборот учит кастовать файерболы второго уровня.
В прошлом топике на эту тему упоминались скринкасты «Ruby Metaprogramming» с Дейвом Томасом. Скачал, доволен как слон. Но тем не менее с удовольствием прочел статью. Пусть оно в мозгу укладывается, а моск постепенно пусть всё это осознает.
Это норм.

Самое смешное, ни прошлые комменты, ни эта статья не ответили на мой вопрос, но все равно плюсую.

Ответ был гораздо проще:
Неявно класс переопределяет для себя оператор <<. Увы, даже беглый просмотр Rubinius в своё время этого мне не дал.

Но статья ОК.
насколько я помню конструкция class << object (я так понял, вы ее имеете ввиду?) — это все же специальный синтаксис, а не переопределнный оператор <<
Начиная с 1.9.2, eigenclass объекта можно достать посредством Object#singleton_class.

Диаграммы замечательные, спасибо.
Значит в книге «Язык программирования Ruby» (Ruby-Programming-Language) Флэнагана и Матцумото только приоткрыли дверь в eigenclass (там их называют обособленные классы), описав их в общем хранилищем синглтон-методов. Вот как надо смотреть в микроскоп на структуру рубина.
Большое спасибо за статью, с нетерпением жду продолжения с такой же доступной и красивой инфографикой.
Возникло пару вопросов (в руби не так давно):
— Если методы класса размещаются в его метаклассе, что тогда остается в самом классе?
— Есть ли метакласс в Object?
— Для метаклассов, которые вы получили методом snoopy.metaclass, нельзя определить методы, так же? Иначе по логике они должны попасть в метакласс метакласса?
  1. в самом классе остаются методы его экземпляров, например;
  2. есть;
    Object.singleton_class
    => #<Class:Object>
    
  3. вроде бы ограничений на создание метакласса метакласса никаких нету, но что куда при этом пойдет — надо смотреть в irb.
по третьему пункту — вы правы, у метакласса есть свой мтекласс и вы можете определять методы для него
но, как писал Паоло Перротта по этому поводу: «Если вы найдете этому практическое применение, дайте миру знать об этом»
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории