在 Ruby 中查找所有包含 Enumerable 模块的类

Look up all classes that includes Enumerable module in Ruby

我想获取包含 Enumerable 的所有类的列表。我可以在 Ruby 中执行此操作吗?

您也可以使用 ObjectSpace 模块来获取所有 类 和模块的列表。对 Enumerable

进行额外检查
require 'set'
enumed = Set.new

ObjectSpace.each_object { |o| enumed.add(o) if [Class, Module].include?(o.class) && o.include?(Enumerable) }
puts enumed.to_a

您可以获得当前在对象内存中的所有 Module(但是请注意,这可能包括不再可访问但尚未被垃圾回收的 ModuleObjectSpace.each_object(Module) 并且因为 each_object 像所有其他迭代方法 returns 和 Enumerator (它本身混合在 Enumerable 中),我们可以简单地 select 这些 Moduleinclude? ancestors 列表中的 Enumerable 模块:

ObjectSpace.each_object(Module).select {|m| m.include?(Enumerable) }
# => [Process::Tms, Enumerator::Generator, Enumerator::Lazy, Enumerator, 
#     ObjectSpace::WeakMap, Dir, File, ARGF.class, IO, Range, Struct, Hash, 
#     Array]