module_function(*name) -> self
[permalink][rdoc]メソッドをモジュール関数にします。
引数が与えられた時には、引数で指定されたメソッドをモジュール関数にします。引数なしのときは今後このモジュール定義文内で新しく定義されるメソッドをすべてモジュール関数にします。
モジュール関数とは、プライベートメソッドであると同時にモジュールの特異メソッドでもあるようなメソッドです。例えば Math モジュールのメソッドはすべてモジュール関数です。
self を返します。
module_function はメソッドに「モジュール関数」という属性をつけるメソッドではなく、プライベートメソッドとモジュールの特異メソッドの 2 つを同時に定義するメソッドです。そのため、以下のように書いてもモジュール関数の別名は定義できません。
module M def foo p "foo" end module_function :foo alias bar foo end M.foo # => "foo" M.bar # => undefined method `bar' for Foo:Module (NoMethodError)
このコードでは、モジュール関数 foo とプライベートインスタンスメソッド bar を定義してしまいます。
正しくモジュール関数に別名を付けるには、以下のように、先に別名を定義してからそれぞれをモジュール関数にしなければいけません。
module M def foo p "foo" end alias bar foo module_function :foo, :bar end M.foo # => "foo" M.bar # => "foo"