extend 用來在一個對象(object,或者說是instance)中引入一個模塊,這個類從而也具備了這個模塊的方法。
通常引用模塊有以下3種情況:
1.在類定義中引入模塊,使模塊中的方法成爲類的實例方法
這種情況是最常見的
直接 include <module name>即可
2.在類定義中引入模塊,使模塊中的方法成爲類的類方法
這種情況也是比較常見的
直接 extend <module name>即可
3.在類定義中引入模塊,既希望引入實例方法,也希望引入類方法
這個時候需要使用 include,
但是在模塊中對類方法的定義有不同,定義出現在 方法
def self.included(c) ... end 中
完整的示例如下:
- module Ma
- MA_VALUE = 1
- def ma_1
- puts "it is ma_1"
- end
- end
- module Mb
- MB_VALUE = 1
- def self.included(c)
- def c.mb_2
- puts "it is mb_2"
- end
- end
- def mb_1
- puts "it is mb_1"
- end
- end
- class Ca
- include Ma
- end
- class Cb
- extend Ma
- include Mb
- end
- c1 = Ca.new
- c1.ma_1
- c2 = Cb.new
- c2.mb_1
- Cb.ma_1
- Cb.mb_2
- puts Ma::MA_VALUE
- puts Ca::MA_VALUE
- puts Mb::MB_VALUE
- puts Cb::MB_VALUE