Ruby中的自省



我操作了一个符号数组,其中一些符号可能是Ruby类名(例如:Fixnum)。

如何选择?

当然,我事先不知道这些符号的完整列表……当然,我在Ruby中是这样做的。

如果您先检查const是否定义,则可以使用const_get进行检查:

[:Integer, :Dog, :Fixnum, :String, :Rat].select{ |x| Object.const_defined?(x) && Object.const_get(x).class === Class }
=> [:Integer, :Fixnum, :String]

我讨厌使用eval,但是....

[:Integer, :Dog, :Fixnum, :String, :Rat].select{|x| defined? x.to_s && Class === eval(x.to_s)}

我试过Kernel.const_get,但不能让它工作。

ObjectSpace.each_object(Class).map(&:name).map(&:to_sym) & [:Integer, :Dog, :Fixnum, :String, :Rat]
=> [:Fixnum, :Integer, :String]

相关内容

  • 没有找到相关文章

最新更新