我操作了一个符号数组,其中一些符号可能是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]