如何检查Ruby中是否已经存在一个类?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

如何检查Ruby中是否已经存在一个类?

我的代码是:

puts "enter the name of the Class to see if it exists"   
nameofclass=gets.chomp  
eval (" #{nameofclass}......  Not sure what to write here")

我想:

eval "#{nameofclass}ancestors.     ....."
提问于
用户回答回答于

也许你可以用defined来做到这一点?

例如:

if defined?(MyClassName) == 'constant' && MyClassName.class == Class  
   puts "its a class" 
end

注意:Class检查是必需的,比如:

Hello = 1 
puts defined?(Hello) == 'constant' # returns true

答案:

puts "enter the name of the Class to see if it exists"
nameofclass=gets.chomp
eval("defined?(#{nameofclass}) == 'constant' and #{nameofclass}.class == Class")
用户回答回答于

你可以用Module.const_get来获取字符串引用的常量。它将返回常量(通常类是由常量引用的)。然后可以检查常量是否是一个类。

我会这么做:

def class_exists?(class_name)
  klass = Module.const_get(class_name)
  return klass.is_a?(Class)
rescue NameError
  return false
end

另外,如果可能的话,我会在接受用户输入时避免使用eval;

扫码关注云+社区