Я манипулирую массивом символов, где некоторые из них являются потенциально именами классов Ruby (например, Fixnum).
Как их выбрать?
Конечно, я незаранее знаю полный список этих символов ... Конечно, я делаю это в Ruby.
Вы можете выполнить проверку с помощью const_get, если вы проверите, определено ли const первым:
[:Integer, :Dog, :Fixnum, :String, :Rat].select{ |x| Object.const_defined?(x) && Object.const_get(x).class === Class } => [:Integer, :Fixnum, :String]
Я ненавижу использовать eval, но ....
eval
[:Integer, :Dog, :Fixnum, :String, :Rat].select{|x| defined? x.to_s && Class === eval(x.to_s)}
Я пытался Kernel.const_get, но не смог заставить это работать.
Kernel.const_get
ObjectSpace.each_object(Class).map(&:name).map(&:to_sym) & [:Integer, :Dog, :Fixnum, :String, :Rat] => [:Fixnum, :Integer, :String]