有人可以解释extend和extend_object钩子之间的区别。互联网上没有适当的文档。
答案 0 :(得分:3)
实质上,extend_object
是执行扩展的方法。您可以覆盖它,例如在扩展发生之前创建类型检查:
module Foo
def self.extend_object(obj)
raise(TypeError, "No strings!") if obj.is_a?(String)
super # need to call super or object
# won't be extended
end
def self.extended(obj)
puts "#{obj.inspect} was extended with #{self}"
end
end
1.extend(Foo)
"1".extend(Foo) # raises TypeError: No strings!
答案 1 :(得分:0)
extend_object
是extend
使用的私有API方法,它添加了模块常量和方法
extend_object(p1) private
通过添加此模块的常量和方法(作为单例方法添加)来扩展指定的对象。这是
Object#extend
使用的回调方法。
https://apidock.com/ruby/Module/extend_object
extended
只是一个回调,开发人员可以在扩展模块时使用其运行特定代码。
https://ruby-doc.org/core-2.2.0/Module.html#method-i-extended