From: dblack@... Date: 2007-05-05T06:47:58+09:00 Subject: Re: modules and class methods. Hi -- On Fri, 4 May 2007, Brad Phelan wrote: > Brad Phelan wrote: >> Why does this not work! >> >> ######################################## >> module Foo >> def self.foo a >> puts a >> end >> end >> >> class Bar >> include Foo >> foo "hello" >> end >> >> foo.rb:20: undefined method `foo' for Bar:Class (NoMethodError) >> #################################### >> >> but this does >> >> class Bar >> def self.foo a >> puts a >> end >> foo "hello" >> end >> >> >> >> What am I misunderstanding about modules???? >> >> -- >> Brad >> http://xtargets.com > > The below code obviously work the way I wish > > module Foo > def foo > puts "a" > end > end > > class Bar > extend Foo > puts foo > end > > however is there any way to get the same effect by using include. I would > like to mix in class and instance methods in one call. It seems > I can do one or the other but not both at the same time. Is that > correct? Basically, yes: mixing in a module inserts the module in only one method lookup path, and a class and its instances generally have very different lookup paths. You can use the inherited hook in Module to do both -- for example: module M def self.included(c) m = self c.class_eval { extend m } end def meth puts "here" end end class C include M end C.meth # here C.new.meth # here David -- Q. What is THE Ruby book for Rails developers? A. RUBY FOR RAILS by David A. Black (http://www.manning.com/black) (See what readers are saying! http://www.rubypal.com/r4rrevs.pdf) Q. Where can I get Ruby/Rails on-site training, consulting, coaching? A. Ruby Power and Light, LLC (http://www.rubypal.com)