Forum: Ruby Verify if a class exists

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Bernd (Guest)
on 2007-07-04 16:05
Hello everybody,

is there a way to check, if a class exists? I create classes dynamically
and would like to know before, if a class with that name already exists.

Thanks for your help
Bernd
Simen E. (Guest)
on 2007-07-04 16:29
(Received via mailing list)
On 7/4/07, Bernd <removed_email_address@domain.invalid> wrote:
>
>

Try a const_get. Like so:

def class_exists?(name)
  begin
    true if Kernel.const_get(name)
  rescue NameError
    false
  end
end
Bernd B. (Guest)
on 2007-07-04 16:36
Simen E. wrote:
> On 7/4/07, Bernd <removed_email_address@domain.invalid> wrote:
>>
>>
>
> Try a const_get. Like so:
>
> def class_exists?(name)
>   begin
>     true if Kernel.const_get(name)
>   rescue NameError
>     false
>   end
> end

Hi,
first of all, thanks for your help, Simen. I think, I even found a
better solution, I assign the name to the class with

Object.const_set class_name, klass

So I can determine, whether the class exists with

Object const_defined? class_name

You are using exception handling (rescue) for a conditional branch,
which I try to avoid whenever possible, to keep my code well structured.
Simen E. (Guest)
on 2007-07-04 16:59
(Received via mailing list)
On 7/4/07, Bernd B. <removed_email_address@domain.invalid> wrote:
> >   rescue NameError
> So I can determine, whether the class exists with
>
> Object const_defined? class_name
>
> You are using exception handling (rescue) for a conditional branch,
> which I try to avoid whenever possible, to keep my code well structured.
>

There is a const_defined? method? Ah, I see it's been some time since
I programmed Ruby. Excuse my ignorant advice, it seems you find a
better solution :)
This topic is locked and can not be replied to.