[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Constant lookup when using namespaces

nemlet

1/11/2009 8:35:00 PM

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?
1 Answer

Rob Biedenharn

1/11/2009 8:43:00 PM

0


On Jan 11, 2009, at 3:34 PM, nemlet@gmail.com 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
>
> 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
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 Biedenharn http://agileconsult...
Rob@AgileConsultingLLC.com