扩展时的Ruby调用模块方法

时间:2015-06-29 19:13:30

标签: ruby module

给定一个基本的ruby类和模块,有没有办法在扩展类的实例后立即从模块调用方法?

class Dog 
  def initialize(name)
    @name = name 
  end 
end

module Speech
  def say_name
    puts @name
  end
  # call to method in module ?
  say_name
end

fido = Dog.new('fido')
fido.extend Speech    => *'fido'*

我知道'包括'在包含模块时行为类似于回调的方法,但我希望有类似的扩展。

1 个答案:

答案 0 :(得分:3)

以下是使用extend_object方法的一个技巧。

  

通过添加此模块的常量方法(添加为单例方法)来扩展指定的对象。这是Object#extend使用的回调方法。

class Dog 
  def initialize(name)
    @name = name 
  end 
end

module Speech
  def Speech.extend_object(o)
    super
    puts o.say_name
  end

  def say_name
    @name
  end
end

fido = Dog.new('fido')
fido.extend Speech # 'fido'