是否可以在ruby中包含每个对象的模块?

时间:2014-12-18 08:27:44

标签: ruby mixins

是否可以在ruby中包含每个实例的模块?

即。在Scala中,您可以执行以下操作。

val obj = new MyClass with MyTrait

你可以在ruby中做类似的事情,或许类似于以下内容吗?

obj = Object.new include MyModule

2 个答案:

答案 0 :(得分:17)

是的,你可以:

obj = Object.new
obj.extend MyModule

答案 1 :(得分:3)

是的,请参阅Object#extend。所有对象都有extend方法,它以模块列表作为参数。使用模块扩展对象将添加模块中的所有实例方法作为扩展对象上的实例方法。

module Noise
  def cluck
    p "Cluck cluck!"
  end
end

class Cucco
end

anju = Cucco.new
anju.extend Noise
anju.cluck

==> "Cluck cluck!"