2013-05-13 89 views
2

我想查找名称与字符串匹配的所有ruby类(忽略大小写)。 这意味着该字符串应该是类名的子字符串。
因此,当您搜索'stri'时,您应该获得类别String(等等)。查找名称与字符串匹配的所有类

你知道一个方便而不是太低效的方法吗?

回答

5
ObjectSpace.each_object(Class) 
.select{|klass| klass.name.downcase.include?("stri".downcase)} 

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

你应该也会使用'stri''。并使其成为方法中的参数。 – 2013-05-13 13:59:14

+0

请注意'ObjectSpace'可能包含应该被垃圾收集但垃圾收集器尚未运行的“陈旧”对象。 IOW:这种方法可能会返回实际上不再存在的类。 – 2013-05-13 14:51:44

+0

@JörgWMittag只要有一个名字的类,他们被分配到一个常量,这意味着他们不是垃圾收集。我错了吗? – sawa 2013-05-13 14:58:59

相关问题