Это лучший способ, на мой взгляд:
[:FOO, :BAR, :FOOBAR].each do |i|
raise "constant #{i} not defined" unless Object.const_defined?(i)
puts "constant #{i} exists and has value #{Object.const_get(i)}"
end
РЕДАКТИРОВАТЬ:
Все немного сложнее, если вы хотите искать константы с учетом области видимости (т.е. не только константы верхнего уровня):
def const_receiver
is_a?(Module) ? self : class << self; self; end
end
[:FOO, :BAR, :FOOBAR].each do |i|
raise "constant #{i} not defined" unless const_receiver.const_defined?(i)
puts "constant #{i} exists and has value #{const_receiver.const_get(i)}"
end