Где зарегистрирован модуль ruby self.included и self.extended behavior?
Я смотрел в блоге ruby mixin, и он говорит, что когда модуль включен в класс, его метод self.included()
называется.
Мой вопрос: где это официально зарегистрировано? Я не могу найти его на сайте ruby-docs.org или кирке.
Ответы
Ответ 1
Пока он не на 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 source в object.c
. К сожалению, Module.extended
не документируется.
Ответ 2
Я подозреваю, что это не на веб-сайте RubyDoc, потому что это частный метод и частные методы в настоящее время не отображаются.
Люди знают об этой проблеме, но они еще не разработали методы обработки частных, даже несмотря на то, что они не являются деталями реализации.
Я создал отчет об ошибке в http://bugs.ruby-lang.org/issues/6381
Ответ 3
кажется, что только общедоступные методы документированы
Ответ 4
Оба документа задокументированы на стр. 556 второго издания кирки (покрытие Ruby 1.8). Документация там выглядит так же, как результат ri Module.included
, который опубликовал Эндрю Маршалл, поэтому я подозреваю, что раздел книги был автоматически сгенерирован. Если он был удален из более поздних выпусков кирки, то это может быть результатом той же ошибки, которая не позволяет ей отображаться на ruby-doc.org.