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?

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

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?

I don't remember the details of "why", but "class A::C; end" opens the make the "class A" namespace explicit, you get the behavior you were expecting.

-Rob

Rob Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com

···

On Jan 11, 2009, at 3:34 PM, nemlet@gmail.com wrote:
A:: scope differently from "class A; class C; end; end". When you