可以调用模块的instance_method吗?

时间:2010-08-10 21:21:11

标签: ruby

这是严格的理论。

module BleeTest
  def meth
    puts 'foo'
  end
end

此代码运行时没有错误,但是有可能调用方法“meth”吗?

在我看来,“meth”是一个无法实例化的模块的实例方法。但那么为什么翻译允许这种结构?

1 个答案:

答案 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来组成对象和类。