Где зарегистрирован модуль 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.