在 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
(但是请注意,这可能包括不再可访问但尚未被垃圾回收的 Module
) ObjectSpace.each_object(Module)
并且因为 each_object
像所有其他迭代方法 returns 和 Enumerator
(它本身混合在 Enumerable
中),我们可以简单地 select
这些 Module
include?
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]
我想获取包含 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
(但是请注意,这可能包括不再可访问但尚未被垃圾回收的 Module
) ObjectSpace.each_object(Module)
并且因为 each_object
像所有其他迭代方法 returns 和 Enumerator
(它本身混合在 Enumerable
中),我们可以简单地 select
这些 Module
include?
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]