Где задокументирован сам модуль ruby и поведение self.extended?
Я просматривал пост в блоге ruby mixin, и там говорится, что когда модуль включен в класс, self.included()
метод называется.
Мой вопрос, где это поведение официально задокументировано? Я не могу найти его на сайте ruby-docs.org или кирке.
4 ответа
Хотя по какой-то причине его нет в Ruby Doc, included
на самом деле задокументировано. Бег ri Module.included
в терминале предусмотрено это:
included( othermod )
Обратный вызов вызывается всякий раз, когда получатель включен в другой модуль или класс. Это следует использовать в предпочтении
Module.append_features
если ваш код хочет выполнить какое-то действие, когда модуль включен в другой.module A def A.included(mod) puts "#{self} included in #{mod}" end end module Enumerable include A end
Эту документацию можно найти в источнике Ruby вobject.c
, К сожалению, Module.extended
не задокументировано
Я подозреваю, что его нет на веб-сайте RubyDoc, потому что это закрытый метод, а приватные методы в настоящее время не отображаются.
Люди знают об этой проблеме, но они еще не разобрались, как обращаться с приватными методами, даже если они не являются деталями реализации.
Я создал отчет об ошибке на http://bugs.ruby-lang.org/issues/6381
Оба документа описаны на странице 556 второго издания кирки (охватывающей Ruby 1.8). Документация там выглядит так же, как результат ri Module.included
что Эндрю Маршалл опубликовал, так что я подозреваю, что раздел книги был создан автоматически. Если он был удален из более поздних выпусков кирки, то это может быть результатом той же ошибки, из-за которой он не появляется на http://www.ruby-doc.org/.