2011-07-15 54 views
1

我操縱一組符號,其中一些符號可能是Ruby類名(例如:Fixnum)。Ruby中的自省

如何選擇它們?

當然,我不知道這些符號的完整列表... 當然,我在Ruby中這樣做。

回答

2

你可以做const_get檢查,如果你檢查是否常量首先定義:

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

我討厭使用eval但是....

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

我試圖Kernel.const_get,但不能得到那個工作。

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