首页 > 代码库 > (转)Ruby的include和extend

(转)Ruby的include和extend

include主要用来将一个模块插入(mix)到一个类或者其它模块。
extend 用来在一个对象(object,或者说是instance)中引入一个模块,这个类从而也具备了这个模块的方法。
通常引用模块有以下3种情况:
1.在类定义中引入模块,使模块中的方法成为类的实例方法
这种情况是最常见的
直接 include <module name>即可

2.在类定义中引入模块,使模块中的方法成为类的类方法
这种情况也是比较常见的
直接 extend <module name>即可

3.在类定义中引入模块,既希望引入实例方法,也希望引入类方法
这个时候需要使用 include,
但是在模块中对类方法的定义有不同,定义出现在 方法
def self.included(c) ... end 中

完整的示例如下:

 1 module Ma    2   MA_VALUE = http://www.mamicode.com/1  "color: #008080;"> 3   def ma_1    4     puts "it is ma_1"   5   end    6 end    7    8 module Mb    9   MB_VALUE = http://www.mamicode.com/1  "color: #008080;">10   def self.included(c)   11     def c.mb_2   12       puts "it is mb_2"  13     end   14   end   15   def mb_1   16     puts "it is mb_1"  17   end   18 end   19   20 class Ca   21   include Ma      22 end   23      24 class Cb   25   extend Ma   26   include Mb   27 end   28   29 c1 = Ca.new  30 c1.ma_1   31   32 c2 = Cb.new  33 c2.mb_1   34 Cb.ma_1   35 Cb.mb_2   36   37 puts Ma::MA_VALUE   38 puts Ca::MA_VALUE   39   40 puts Mb::MB_VALUE   41 puts Cb::MB_VALUE  

 

(转)Ruby的include和extend