How to check if a class already exists in Ruby How to check if a class already exists in Ruby ruby ruby

How to check if a class already exists in Ruby


You can use Module.const_get to get the constant referred to by the string. It will return the constant (generally classes are referenced by constants). You can then check to see if the constant is a class.

I would do something along these lines:

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

Also, if possible I would always avoid using eval when accepting user input; I doubt this is going to be used for any serious application, but worth being aware of the security risks.


perhaps you can do it with defined?

eg:

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

Note: the Class check is required, for example:

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

To answer the original question:

puts "enter the name of the Class to see if it exists"nameofclass=gets.chompeval("defined?(#{nameofclass}) == 'constant' and #{nameofclass}.class == Class")


You can avoid having to rescue the NameError from Module.const_get if you are looking the constant within a certain scope by calling Module#const_defined?("SomeClass").

A common scope to call this would be Object, eg: Object.const_defined?("User").

See: "Module".