新人學ruby---Ruby的include和extend

include主要用來將一個模塊插入(mix)到一個類或者其它模塊。 
extend 用來在一個對象(object,或者說是instance)中引入一個模塊,這個類從而也具備了這個模塊的方法。 
通常引用模塊有以下3種情況: 
1.在類定義中引入模塊,使模塊中的方法成爲類的實例方法 
這種情況是最常見的 
直接 include <module name>即可 

2.在類定義中引入模塊,使模塊中的方法成爲類的類方法 
這種情況也是比較常見的 
直接 extend <module name>即可 

3.在類定義中引入模塊,既希望引入實例方法,也希望引入類方法 
這個時候需要使用 include, 
但是在模塊中對類方法的定義有不同,定義出現在 方法 
def self.included(c) ... end 中 

完整的示例如下: 

Java代碼 複製代碼
  1.   
  2. module Ma   
  3.   MA_VALUE = 1  
  4.   def ma_1   
  5.     puts "it is ma_1"  
  6.   end   
  7. end   
  8.   
  9. module Mb   
  10.   MB_VALUE = 1  
  11.   def self.included(c)   
  12.     def c.mb_2   
  13.       puts "it is mb_2"  
  14.     end   
  15.   end   
  16.   def mb_1   
  17.     puts "it is mb_1"  
  18.   end   
  19. end   
  20.   
  21. class Ca   
  22.   include Ma      
  23. end   
  24.      
  25. class Cb   
  26.   extend Ma   
  27.   include Mb   
  28. end   
  29.   
  30. c1 = Ca.new  
  31. c1.ma_1   
  32.   
  33. c2 = Cb.new  
  34. c2.mb_1   
  35. Cb.ma_1   
  36. Cb.mb_2   
  37.   
  38. puts Ma::MA_VALUE   
  39. puts Ca::MA_VALUE   
  40.   
  41. puts Mb::MB_VALUE   
  42. puts Cb::MB_VALUE  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章