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


我在看着 红宝石混合 博客文章,它说当一个模块被包含在一个类中时 self.included() 方法被调用。

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


4115
2018-04-29 05:13


起源



答案:


虽然它没有开启 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 没有记录。


10
2018-04-29 06:19



Module.extended 就像 included,除了它在你打电话时运行 extend some_module 而不是当你打电话 include some_module。 - Nathan Long


答案:


虽然它没有开启 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 没有记录。


10
2018-04-29 06:19



Module.extended 就像 included,除了它在你打电话时运行 extend some_module 而不是当你打电话 include some_module。 - Nathan Long


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

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

我在那里创建了一个错误报告 http://bugs.ruby-lang.org/issues/6381


1
2018-04-29 22:26



有趣的是,它是可见的 ri但是。私有方法没有关于Ruby Doc的好处!绝对不幸的是,如果他们默认“折叠”,那就太好了,但仍然可以被查看。 - Andrew Marshall


似乎只记录了公共方法


0
2018-04-29 22:31





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


0
2018-04-29 22:39