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