Ruby 包含在模块中的self

Ruby 包含在模块中的self,ruby,module,metaprogramming,mixins,Ruby,Module,Metaprogramming,Mixins,我有一个类Brand,其中包括一个模块simplerlsanitizer。该模块有一个类方法,定义如下: class Brand include SimpleURLSanitizer end module SimpleURLSanitizer def self.included base base.send :extend, self end end 因为我们包含了模块,所以它只能访问模块的实例方法。但是当模块包含在类中时,将调用类方法included。base是Bran

我有一个类
Brand
,其中包括一个模块
simplerlsanitizer
。该模块有一个类方法,定义如下:

class Brand
  include SimpleURLSanitizer
end

module SimpleURLSanitizer
  def self.included base
    base.send :extend, self
  end
end

因为我们包含了模块,所以它只能访问模块的实例方法。但是当模块包含在类中时,将调用类方法
included
base
Brand
类。这个
包含的
方法在做什么?此方法中的
self
是指模块还是
Brand
类?它是如何工作的?

当您在一个类中包含
simplerlsanitizer
时,
simplerlsanitizer
的所有方法都可以作为实例方法访问。这是默认行为


所包含的
部分也确保您可以将这些方法作为类方法访问。

基本
自身
分别参考
品牌
SimpleURLSanitizer
。命令将展开为:

Brand.send(:extend, SimpleURLSanitizer)
可重写为:

class Brand
  extend SimpleURLSanitizer
end

这意味着
simpleralsanitizer
的实例方法也将成为
Brand

self
的类方法,其中
包含的
方法指的是
Brand
类?否,指的是模块
simpleralsanitizer
。但是
base
指的是
Brand
class。