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