Ruby 中的每个模块都可以混合在一个对象中。一旦一个类是一个对象,你就可以在一个类中使用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"
如果您希望直接从 Foo 模块调用 bar 方法,您可以按照@xdazz 所写的相同方式进行操作,但是由于扩展字混合为一个类:
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