Need a bit help on "module_function" method

The documentation is very straight forward and the mentioned example
also cleared all the lines except the one mentioned inside **.

Creates module functions for the named methods. These functions may be
called with the module as a receiver, and also become available as
instance methods to classes that mix in the module. Module functions are
copies of the original, and so may be changed independently. The
instance-method versions are made private. If used with no arguments,
subsequently defined methods become module functions.

module Mod
def one
“This is one”
end
module_function :one
end
class Cls
include Mod
def call_one
one
end
end
Mod.one #=> “This is one”
c = Cls.new
c.call_one #=> “This is one”
module Mod
def one
“This is the new one”
end
end
Mod.one #=> “This is one”
c.call_one #=> “This is the new one”

Please help me to understand what does mean by “If used with no
arguments, subsequently defined methods become module functions.”?

Please help me to understand what does mean by “If used with no
arguments, subsequently defined methods become module functions.”?

Okay got it now:-

module Party
module_function
def foo
“I am foo”
end
def bar
“I am bar”
end
end

Party.foo # => “I am foo”
Party.bar # => “I am bar”

On Aug 29, 2013, at 2:16 PM, Love U Ruby [email protected] wrote:

Please help me to understand what does mean by “If used with no
arguments, subsequently defined methods become module functions.”?

That means you can use it as a means of saying “All the methods defined
below are module functions”:

Module M

def foo
end

module_function

def bar
end

def baz
end

end

and so you can then call M.bar and M.baz, but not M.foo.

This is identical to:

Module M
def foo;end
def bar;end
def baz;end
module_function :bar, :baz
end

It is also identical to:

Module M
def foo;end
def self.bar; end
def self.baz; end
end