2016-03-07 82 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類方法作爲該命令將被擴大。