Defining a class without opening an existent one

Hi there!

I want to define a class which happens to have the same name as a
builtin class. It shouldn’t be a problem because it’s in an extra
namespace, but Ruby opens the existing class instead of defining a new
one. Here’s an example:

module MyNamespace
class Array
# Some stuff
end
end

I tried using the full qualifier (class MyNamespace::Array) but it
didn’t help. Is there a possibility to actually define a new class?

Hagbard C. wrote:0

I want to define a class which happens to have the same name as a
builtin class. It shouldn’t be a problem because it’s in an extra
namespace, but Ruby opens the existing class instead of defining a new
one. Here’s an example:

module MyNamespace
class Array
# Some stuff
end
end

That’s fine. What makes you think that this didn’t create a separate
class?

I tried using the full qualifier (class MyNamespace::Array) but it
didn’t help.

In what way didn’t it help? Did you get an error message? Post your full
code and the exception.

Is there a possibility to actually define a new class?

Sure, you’ve just done it :slight_smile:

module MyNamespace; class Array; end; end
=> nil

Array.object_id
=> 70098182563360

MyNamespace::Array.object_id
=> 70098182326040

a = MyNamespace::Array.new
=> #MyNamespace::Array:0x7f820281f520

a[1]
NoMethodError: undefined method `[]’ for
#MyNamespace::Array:0x7f820281f520
from (irb):5
from :0

All of a sudden, the scales fall from my eyes. At first I wasn’t so sure
whether I defined a new class or not myself. I looked at the methods of
the class and something made me think that they were the same as
Arrays. Retrospectively, I don’t know what made me think so. Thanks
for your help.

Robert K. wrote:

creation of a class with the same name as one of
the core classes does not seem like a good idea to me - although it’s
certainly possible. It may cause confusion and it also makes using
the core class more cumbersome (you need to reference it as ::Array in
the module and nested classes for example).

That’s true but unfortunately Array is just the perfect name for my
class. I rather use MyNamespace::Array and ::Array instead of inventing
a bad-fitting name for the class.

On Thu, Sep 23, 2010 at 9:59 PM, Hagbard C. [email protected]
wrote:

All of a sudden, the scales fall from my eyes. At first I wasn’t so sure
whether I defined a new class or not myself. I looked at the methods of
the class and something made me think that they were the same as
Arrays. Retrospectively, I don’t know what made me think so. Thanks
for your help.

Just adding 0.02EUR: creation of a class with the same name as one of
the core classes does not seem like a good idea to me - although it’s
certainly possible. It may cause confusion and it also makes using
the core class more cumbersome (you need to reference it as ::Array in
the module and nested classes for example).

Kind regards

robert

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs