Ruby:获取扩展模块列表?

Mar*_*rio 17 ruby

当您在类或其他模块中包含模块时,您可以调用它们

@mymod.included_modules
Run Code Online (Sandbox Code Playgroud)

获取包含的模块列表.

有没有相应的列出模块扩展的模块?

module Feature1
end

module Feature2
  extend Feature1
end

Feature2.extended_modules #=> [Feature1]
Run Code Online (Sandbox Code Playgroud)

Dam*_*ien 25

Feature2.singleton_class.included_modules # => [Feature1, ...]
Run Code Online (Sandbox Code Playgroud)

  • 这应该是选定的答案. (3认同)

pil*_*row 19

他们在那里,你只需要在正确的地方寻找:

(class << Feature2; self end).included_modules   # [Feature1, Kernel]
Run Code Online (Sandbox Code Playgroud)

我们可以这样概括:

class Module
  # Return any modules we +extend+
  def extended_modules
    (class << self; self end).included_modules
  end
end

# Now get those extended modules peculiar to Feature2
Feature2.extended_modules - Module.extended_modules # [Feature1]
Run Code Online (Sandbox Code Playgroud)

  • 我认为社区已经确定了*singleton class*.在Ruby 1.9中甚至还有一个`Object#singleton_class`方法,它返回一个对象的单例类.这个工作的原因当然是`extend`实际上只是`singleton_class.include`. (11认同)
  • 这将是本征类 (3认同)