当您在类或其他模块中包含模块时,您可以调用
@mymod.included_modules
获取包含的模块列表。
是否有相应的方法列出扩展了某个模块的模块列表?
module Feature1
end
module Feature2
extend Feature1
end
Feature2.extended_modules #=> [Feature1]
当您在类或其他模块中包含模块时,您可以调用
@mymod.included_modules
获取包含的模块列表。
是否有相应的方法列出扩展了某个模块的模块列表?
module Feature1
end
module Feature2
extend Feature1
end
Feature2.extended_modules #=> [Feature1]
Feature2.singleton_class.included_modules # => [Feature1, ...]
那些东西确实存在,你只需要在正确的地方查找:
(class << Feature2; self end).included_modules # [Feature1, Kernel]
我们可以这样概括:
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]
Object#singleton_class
方法来返回对象的单例类。这个方法之所以能够运作,当然是因为extend
本质上就是singleton_class.include
。 - Jörg W Mittagruby -e 'puts Gem::Specification.all().map{|g| [g.name, g.version.to_s] }'
或者
ruby -rubygems -e 'puts Gem::Specification.all().map{|g| [g.name, g.version.to_s] }'