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。