gpt4 book ai didi

Ruby 在扩展时调用模块方法

转载 作者:数据小太阳 更新时间:2023-10-29 07:33:48 25 4
gpt4 key购买 nike

给定一个基本的 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'*

我知道“included”方法在包含模块时有点像回调,但我希望扩展有类似的东西。

最佳答案

这是使用方法 extend_object 的一个技巧.

Extends the specified object by adding this module’s constants and methods (which are added as singleton methods). This is the callback method used by 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'

关于Ruby 在扩展时调用模块方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31123702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com