ruby模块self.included和self.extended行为记录在哪里?

时间:2012-04-29 05:13:48

标签: ruby mixins

我正在查看ruby mixin博客文章,它说当一个模块包含在一个类中时,会调用其self.included()方法。

我的问题是,这种行为在哪里正式记录?我似乎无法在ruby-docs.org网站或pickaxe上找到它。

4 个答案:

答案 0 :(得分:10)

虽然由于某些原因它不在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 in object.c中找到。遗憾的是,Module.extended没有记录。

答案 1 :(得分:1)

我怀疑它不在RubyDoc网站上,因为它是私有方法,并且当前没有显示私有方法。

人们已经意识到这个问题,但是他们还没有找到如何处理私有方法,即使它们不是实现细节。

我在http://bugs.ruby-lang.org/issues/6381

创建了一个错误报告

答案 2 :(得分:0)

似乎只记录公共方法

答案 3 :(得分:0)

两者都记录在第二版pickaxe的第556页(涵盖Ruby 1.8)。那里的文档看起来就像Andrew Marshall发布的ri Module.included的结果,所以我怀疑这本书的部分是自动生成的。如果它从后来的镐抄本中被删除,那么它可能是由于同一个错误导致它无法显示在ruby-doc.org上。