Где зарегистрирован модуль 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, потому что это частный метод и частные методы в настоящее время не отображаются.
Люди знают об этой проблеме, но они еще не разработали методы обработки частных, даже несмотря на то, что они не являются деталями реализации.
кажется, что только общедоступные методы документированы
Ответ 4
Оба документа задокументированы на стр. 556 второго издания кирки (покрытие Ruby 1.8). Документация там выглядит так же, как результат ri Module.included, который опубликовал Эндрю Маршалл, поэтому я подозреваю, что раздел книги был автоматически сгенерирован. Если он был удален из более поздних выпусков кирки, то это может быть результатом той же ошибки, которая не позволяет ей отображаться на ruby-doc.org.