首页 > 解决方案 > 扩展和扩展对象挂钩有什么区别

问题描述

有人可以解释扩展和扩展对象挂钩之间的区别吗?互联网上没有适当的文档。

标签: ruby

解决方案


本质上,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!

推荐阅读