我有一个模块和一门课。
module Dog
def speak
"woof"
end
end
class Daschund; end
我创建了类的两个单独示例。
sausage = Daschund.new
saveloy = Daschund.new
如果我想添加Dog#woof
作为我的两个新对象的示例方法,我可以用两种方法来完成:
一个一个二个一个一个一个三个一个一个一个一个一个一个四个一个一个一个一个一个五个一个
这两个方法是等价的吗?我知道第一个方法将模块的方法添加到对象的元类中。object#extend
做同样的事情吗?或者它做的事情稍微不同?有什么方法可以证明这一点吗?
1条答案
按热度按时间3qpi33ja1#
根据Object的文档,用模块扩展对象意味着将该模块包含到对象的单例类中:
extend
:包含self
的单例类中的给定模块。检查两个对象的单例类的
ancestors
可以确认这一点:实际的实现细节当然取决于Ruby的实现和版本,对于MRI/YARV,
rb_extend_object
定义为: