Вникаем в include и extend
Все рубисты знакомы с формальными определениями для include
и extend
. Вы делаете include
модуля, чтобы добавить методы экземпляра класса, и extend
— чтобы добавить методы класса. К сожалению, данные определения не совсем точны. Они не могут объяснить почему мы используем instance.extend(Module)
, чтобы добавить методы объекту. Разве не должны мы в этом случае использовать instance.include(Module)
? Чтобы разобраться в этом вопросе, начнем с выяснения где же хранятся методы.