Ruby のすべてのモジュールは、オブジェクトに混在させることができます。クラスが objectになると、 extendという単語を使用してクラス内のメソッドを混在させることができます。
module Foo
def bar
'bar'
end
end
class MyInstanceMethods
include Foo
end
class MyClassMethods
extend Foo
end
## Usage:
MyInstanceMethods.new.bar
=> "bar"
MyClassMethods.bar
=> "bar"
bar メソッドを Foo モジュールから直接呼び出したい場合は、@xdazz が書いたのと同じ方法で実行できますが、extendワードが Class に混在するためです。
MyInstanceMethods.class
=> Class
MyClassMethods.class
=> Class
Module.class
=> Class # Hey, module is also a class!!!!!
トリック:
module Foo
extend self # self of Foo is the Module!
def bar
# .....
end
end
これで、 Foo.barが期待される結果を返すことがわかります:P