Ruby 查找名称与字符串匹配的所有类

Ruby 查找名称与字符串匹配的所有类,ruby,metaprogramming,Ruby,Metaprogramming,我想查找名称与字符串匹配的所有ruby类(忽略大小写)。 这意味着字符串应该是类名的子字符串。 因此,当您搜索“stri”时,您应该会得到类字符串(以及其他内容) 您知道一种方便且不太低效的方法吗?您可能也应该使用downcase“stri”。请注意,ObjectSpace可能包含“过时”对象,这些对象应该进行垃圾收集,但垃圾收集器尚未运行。IOW:此方法可能返回实际上不存在的类。@JörgWMittag只要有名称的类,它们就会被分配到一个常量,这意味着它们不会被垃圾收集。我错了吗?我会使用Re

我想查找名称与字符串匹配的所有ruby类(忽略大小写)。 这意味着字符串应该是类名的子字符串。
因此,当您搜索“stri”时,您应该会得到类
字符串
(以及其他内容)


您知道一种方便且不太低效的方法吗?

您可能也应该使用downcase
“stri”
。请注意,
ObjectSpace
可能包含“过时”对象,这些对象应该进行垃圾收集,但垃圾收集器尚未运行。IOW:此方法可能返回实际上不存在的类。@JörgWMittag只要有名称的类,它们就会被分配到一个常量,这意味着它们不会被垃圾收集。我错了吗?我会使用Regexp:
/stri/I===klass.name
,它更短更灵活;结束;Foo=零;ObjectSpace.each|u对象(类)。选择{| c | c.name=='Foo'}#=>[Foo]我甚至尝试在其中抛出一个
GC.start
。只要您没有实际耗尽内存,GC就不会运行,类仍然会被找到。
ObjectSpace.each_object(Class)
.select{|klass| klass.name.downcase.include?("stri".downcase)}

# => [
  String,
  RubyToken::TkDXSTRING,
  RubyToken::TkDSTRING,
  RubyToken::TkXSTRING,
  RubyToken::TkSTRING
]