Constant lookup

I’ve come across an odd issue when using a constant that is defined
within more than one module namespace. I’ve searched this
forum/ml/newsgroup for some answers, but I didn’t come across anything
that quite addressed the situation I’m seeing.

Can anyone explain why this occurs? Is it supposed to? It doesn’t make a
ton of sense to me.

module Z
class A
def initialize
puts “Z::A”
end
end
module Y
module X
class A
def initialize
puts “Z::Y::x::A”
end
end
end
class B
include X
def initialize
puts “Z::Y::B”
@a = A.new
end
end
end
end

Z::A.new
Z::A
=> #<Z::a:0x573dc>

Z::Y::x::A.new
Z::Y::x::A
=> #<Z::Y::x::a:0x5030c>

Z::Y::B.new
Z::Y::B
Z::A
=> #<Z::Y::b:0x48e18 @a=#<Z::a:0x48dc8>>

Z::Y::B.const_get(“A”)
=> Z::Y::x::A

module Z
module Y
class B
const_get(“A”)
end
end
end
=> Z::Y::x::A

module Z
module Y
class B
A
end
end
end
=> Z::A

It seems to me, though obviously I’m wrong, that the bare constant ‘A’
should evaluate to exactly the same thing as self.const_get(“A”).

In the mean time, I’ll just rename my constants to non-conflicting
names, but… why is this working this way in the first place?

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