self.included 在一个模块中
self.included in a module
我有一个 class Brand
,其中包含一个模块 SimpleURLSanitizer
。该模块有一个 class 方法定义如下:
class Brand
include SimpleURLSanitizer
end
module SimpleURLSanitizer
def self.included base
base.send :extend, self
end
end
由于我们包含模块,它只能访问模块的实例方法。但是 class 方法 included
将在模块包含在 class 中时被调用。 base
就是 Brand
class。这个 included
方法在做什么?这个方法里面的self
是指模块还是Brand
class?它是如何工作的?
当您在 class 中包含 SimpleURLSanitizer
时,SimpleURLSanitizer
的所有方法都可以作为实例方法访问。这是默认行为。
included
部分还确保您可以将这些方法作为 class 方法访问。
base
和self
分别指的是Brand
和SimpleURLSanitizer
。该命令将展开为:
Brand.send(:extend, SimpleURLSanitizer)
可以改写为:
class Brand
extend SimpleURLSanitizer
end
意味着SimpleURLSanitizer
的实例方法也将成为Brand
的class方法。
我有一个 class Brand
,其中包含一个模块 SimpleURLSanitizer
。该模块有一个 class 方法定义如下:
class Brand
include SimpleURLSanitizer
end
module SimpleURLSanitizer
def self.included base
base.send :extend, self
end
end
由于我们包含模块,它只能访问模块的实例方法。但是 class 方法 included
将在模块包含在 class 中时被调用。 base
就是 Brand
class。这个 included
方法在做什么?这个方法里面的self
是指模块还是Brand
class?它是如何工作的?
当您在 class 中包含 SimpleURLSanitizer
时,SimpleURLSanitizer
的所有方法都可以作为实例方法访问。这是默认行为。
included
部分还确保您可以将这些方法作为 class 方法访问。
base
和self
分别指的是Brand
和SimpleURLSanitizer
。该命令将展开为:
Brand.send(:extend, SimpleURLSanitizer)
可以改写为:
class Brand
extend SimpleURLSanitizer
end
意味着SimpleURLSanitizer
的实例方法也将成为Brand
的class方法。