Задать вопрос
@DartNyan

При подключении модуля, его код встраивается, как макрос или методы просто запрашиваются из него?

Привет.
Только начинаю изучать Ruby. (еще до RoR не добрался, но как я понял разницы по этому вопросу не будет)
Прочитал, что многие модули разбиваются на две части. (ClassMethods и InstanceMethods)
И в таком случае, то они подключается не как обычные саб модули через "::", а через коллбэк
Кстати, почему? Не понял это момент
И какой смысл в сабмодулях? Это только для удобства или подключение модуля это прям встраивание кода из него?
  • Вопрос задан
  • 164 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
evgenykungurov
@evgenykungurov
Программист Ruby/Rails/Системный администратор
Позволяет несколько сократить код добавляя изящности и тут же сложности в понимании. Если модуль разбит на еще вложенные модули, то благодаря колбэкам included, extended и inherited позволяет выполнить с классом наследником какие-либо действия в соответствии с их названием(included/extend вызовется, когда этот модуль вложат в другой модуль или класс(include SomeModule, extend SomeModule, а inherited когда интерпретатор будет читать код сверху вниз, то выполнится как будет вызов наследования SomeClass < OtherClass).
Благодаря этим колбэкам в рельсах используют метапрограммирование, чтобы расширить класс получатель дополнительным функционалом избавляя нас прописывать этот функционал явно в классе.
Подробности тут: www.sitepoint.com/hitchhikers-guide-to-metaprogram...
Уже дальше можете сами загуглить, что не ясно, направление дал.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ibub1ik
@ibub1ik
Ruby/Rails Dev => Elixir
При подключении модуля он просто попадает в method lookup path, никакого переноса кода не происходит.
Модули с подмудлями ClassMethods/InstanceMethods подключаются через макрос, потому что это удобнее (меньше кода), а DRY - одна из идиом Ruby. Никто не запрещает подключать вручную, просто в сообществе принято делать это через included.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы