From: "Chr. Rippel" Date: 2001-12-09T18:38:11+09:00 Subject: [ruby-talk:28015] Re: Module ext not accessable by class function? "Jim Freeze" wrote in message news:20011208215921.P97542-100000@www.stelesys.com... > Hi: > > Can someone explain why Base.in_C does not see the in_C function. > > cat test.rb > #! /usr/local/bin/ruby > > module A > module B > module C > def in_C > puts "in_C" > end#in_C > end# module C > > class Base > include C > def initialize > in_C() > end#initialize > def Base.in_C > C::in_C() > end#Base.in_C > end# class Base > > end# module B > end# module A > > include A::B > b = Base.new > b.extend(C) > b.in_C > Base.in_C # <= why does this not see C::in_C? > > > ./test.rb > in_C > in_C > /test.rb:17:in `in_C': undefined method `in_C' for A::B::C:Module > (NameError) > from ./test.rb:28 You never defined a module method A::B::C.in_C (only an instance method with the same name). The error would goes away if you add this snippet to your code ------------- module A module B def C.in_C puts "in_C" end#in_C end end ------------- Furthermore your problem about the visiblity of class constants is probably an effect of class constant scoping rules - Note the scoping rules for class/module variables are very different. ------------- module A Veil = "Hitten Beauty" end module A def self.visible p Veil end end def A.explicit_scope p A::Veil end def A.constant_surprise? begin Veil rescue NameError => mes p mes end end A.visible # => Hitten Beauty A.explicit_scope # => Hitten Beauty A.constant_surprise? # => ------------- > > Thanks > > ========================================================= > Jim Freeze > jim@freeze.org > --------------------------------------------------------- > Today is a fine day for Ruby programming. > http://www.freeze.org > ========================================================= >