Самоанализ в рубине - PullRequest
       22

Самоанализ в рубине

1 голос
/ 15 июля 2011

Я манипулирую массивом символов, где некоторые из них являются потенциально именами классов Ruby (например, Fixnum).

Как их выбрать?

Конечно, я незаранее знаю полный список этих символов ... Конечно, я делаю это в Ruby.

Ответы [ 3 ]

2 голосов
/ 15 июля 2011

Вы можете выполнить проверку с помощью const_get, если вы проверите, определено ли const первым:

[:Integer, :Dog, :Fixnum, :String, :Rat].select{ |x| Object.const_defined?(x) && Object.const_get(x).class === Class }
=> [:Integer, :Fixnum, :String]
2 голосов
/ 15 июля 2011

Я ненавижу использовать eval, но ....

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

Я пытался Kernel.const_get, но не смог заставить это работать.

0 голосов
/ 15 июля 2011
ObjectSpace.each_object(Class).map(&:name).map(&:to_sym) & [:Integer, :Dog, :Fixnum, :String, :Rat]
=> [:Fixnum, :Integer, :String]
...