From: gotoken@... (GOTO Kentaro) Date: 1999-05-23T12:23:16+09:00 Subject: [ruby-talk:00335] Re: module-class calling Hi, In message "[ruby-talk:00334] Re: module-class calling" on 99/05/22, "Michael Neumann" writes: >But now I have to declare also the functions, which are called by "hello" as >module_functions. >Following example does not work (without :bye): > > module A > def bye > print "BYE\n" > end > > def hello > print "HELLO\n" > bye > end > > module_function :hello #, :bye > end > > class B > def call_A > A.hello > end > end > > x = B.new > x.call_A > >Is the only solution to declare all functions inside the module, which are >called from a module-function ('hello'), >as module_function (like 'bye'), even if they are not called from outside >the module? Well, the module-function are called only as either a singleton method of the module or an instance method after including the module. So, if you want call `hello' as a singleton method and `hello' calls `bye' you have to put `module_function :bye'. By the way, I use modules when I want (1) to provide a name space for the constants, (2) to let several classes include a same module, or (3) to define many singleton methods as module_function The case (2) is known as mixin. You can see an example of the case (3) in the mathematical modules, e.g., lib/rational.rb etc. -- gotoken