给定一个基本的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'*
我知道'包括'在包含模块时行为类似于回调的方法,但我希望有类似的扩展。
答案 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'