我有一个包含模块Brand
的课程SimpleURLSanitizer
。该模块有一个类方法定义如下:
class Brand
include SimpleURLSanitizer
end
module SimpleURLSanitizer
def self.included base
base.send :extend, self
end
end
由于我们包含了模块,因此它只能访问模块的实例方法。但是当模块包含在类中时,将调用类方法included
。 base
是Brand
类。这个included
方法在做什么?此方法中的self
是指模块还是Brand
类?它是如何工作的?
答案 0 :(得分:1)
当您在课程中包含SimpleURLSanitizer
时,SimpleURLSanitizer
的所有方法都可以作为实例方法访问。这是默认行为。
included
部分也确保您可以作为类方法访问这些方法。
答案 1 :(得分:1)
base
和self
分别指代Brand
和SimpleURLSanitizer
。该命令将扩展为:
Brand.send(:extend, SimpleURLSanitizer)
可以改写为:
class Brand
extend SimpleURLSanitizer
end
表示SimpleURLSanitizer
的实例方法也将成为Brand
的类方法。