这是严格的理论。
module BleeTest
def meth
puts 'foo'
end
end
此代码运行时没有错误,但是有可能调用方法“meth”吗?
在我看来,“meth”是一个无法实例化的模块的实例方法。但那么为什么翻译允许这种结构?
答案 0 :(得分:7)
是的,当然。您可以将BleeTest
混合到对象中:
o = Object.new
o.extend BleeTest
o.meth
# foo
或者您可以将BleeTest
混合到一个类中:
class C
include BleeTest
end
o = C.new
o.meth
# foo
事实上,第一种形式也可以用第二种形式表达:
o = Object.new
class << o
include BleeTest
end
o.meth
# foo
毕竟是Ruby中模块的整点:作为mixins来组成对象和类。