From: Jos Backus Date: 2008-08-31T06:04:36+09:00 Subject: Re: Ncurses module inclusion question Hi John, Thanks for your response. On Sat, Aug 30, 2008 at 04:14:00AM +0900, John Pritchard-williams wrote: > Its a weird quirky feature I don't really understand - but managed to > put together this: I have to guess that Ncurses is defining a 'normal' > module, whereas I know (from my book!) that the Math library used > 'Module#module_function'. > > (My program but based on "The Ruby Programming Language : ISBN-10: > 0-596-51617-7 , O'Reilly, Page 248 onwards (esp: page 251 "Includable > Namespace Modules"). Sadly I don't have that book (yet). > Cheers > > John > > module Mymodule > Module#module_function > def method1 > puts "method1 called" > end > end > > module MyOtherModule > def MyOtherModule.method2 > puts "method2 called" > end > end > > > include Mymodule > include MyOtherModule > Mymodule.method1 > method1 # this will work. > MyOtherModule.method2 > method2 #this will fail Hm, `Module#module_function' seems to be parsed as `Module # comment'. Also, `def MyOtherModule.method2'defines a class method, no? At least, that's what it would do if MyOtherModule were a class. You sure you don't just mean module Mymodule def method1 puts "method1 called" end module_function :method1 end (See http://devclue.blogspot.com/2007/12/rubys-modulemodulefunction-method.html) Although it doesn't seem to make a difference here. > Also note: if you do: > > include Math > Object.respond_to?("sqrt") > > You'll see that Object hasn't really grown a new method at all - it's > all a big trick ;-) It's magic :-) And confusing. -- Jos Backus jos at catnook.com