2016-03-07 80 views
2

我有一个类Brand,其中包括一个模块SimpleURLSanitizer。该模块具有如下定义的类方法:self.included在模块中

class Brand 
    include SimpleURLSanitizer 
end 

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

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

回答

1

由于您在课程中包含SimpleURLSanitizer,所有SimpleURLSanitizer的方法都将作为实例方法访问。这是默认行为。

included部分还确保您可以将这些方法作为类方法来访问。

+0

'included'方法中'self'是指'Brand'类? – mhaseeb

+0

没有指的是模块'SimpleURLSanitizer'。但'base'是指'品牌'类。 – Babar

1

baseself分别指BrandSimpleURLSanitizer

Brand.send(:extend, SimpleURLSanitizer) 

其可以被重写为::

class Brand 
    extend SimpleURLSanitizer 
end 

和意味着SimpleURLSanitizer实例方法也将成为Brand类方法作为该命令将被扩大。