Constant lookup when using namespaces

Here is an example.

#!/usr/bin/ruby

class A

end

class A::B

def method_one
x = C.new
puts x.blah
end

end

class A::C

def blah
puts “I want this one”
end
end

class C

def blah
puts “this is the wrong one”
end

end

ab = A::B.new
ab.method_one

As you can see when you run it you get the blah out of ::C NOT A::C
which I was expecting. Is there a way to be able to say C.new inside
of A::B and have it check the A:: Namespace first?

On Jan 11, 2009, at 3:34 PM, [email protected] wrote:

Here is an example.

#!/usr/bin/ruby

class A

end

class A
class B

def method_one
x = C.new
puts x.blah
end

end

end

class A
class C

def blah
puts “I want this one”
end
end

ab = A::B.new
ab.method_one

As you can see when you run it you get the blah out of ::C NOT A::C
which I was expecting. Is there a way to be able to say C.new inside
of A::B and have it check the A:: Namespace first?

I don’t remember the details of “why”, but “class A::C; end” opens the
A:: scope differently from “class A; class C; end; end”. When you
make the “class A” namespace explicit, you get the behavior you were
expecting.

-Rob

Rob B. http://agileconsultingllc.com
[email protected]