日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
淺談Ruby on Rails中的include和extend

從模塊引入方法、變量,使得編程變得簡(jiǎn)單,擴(kuò)展性愈強(qiáng),比以往的類(lèi)的繼承更靈活。這樣的引入,仿佛將一個(gè)方法塊,復(fù)制了一份放到了你所引用的類(lèi)或者模塊里面。你完全可以將多個(gè)互不相干的類(lèi)中相同的方法拿出來(lái)寫(xiě)到一個(gè)模塊中,這樣可以使得代碼精簡(jiǎn),符合Ruby的設(shè)計(jì)初衷,而且,使得你的程序更有條理。

Ruby on Rails常見(jiàn)用法

通常引用模塊有以下3種情況:

1.在類(lèi)定義中引入模塊,使模塊中的方法成為類(lèi)的實(shí)例方法

這種情況是最常見(jiàn)的

直接 include 即可

2.在類(lèi)定義中引入模塊,使模塊中的方法成為類(lèi)的類(lèi)方法

這種情況也是比較常見(jiàn)的

直接 extend 即可

3.在類(lèi)定義中引入模塊,既希望引入實(shí)例方法,也希望引入類(lèi)方法

這個(gè)時(shí)候需要使用 include,

但是在模塊中對(duì)類(lèi)方法的定義有不同,定義出現(xiàn)在self.included塊中

def self.included(c) ... end 中

Ruby on Rails實(shí)例講解

Code

 
 
 
  1. #基類(lèi)  
  2. module Base  
  3.   #顯示  
  4.   def show  
  5.     puts "You came here!"  
  6.   end  
  7. end  
  8. class Car  
  9.   extend Base   #擴(kuò)展了類(lèi)方法,我們可以通過(guò)Car.show調(diào)用  
  10. end  
  11. class Bus  
  12.   include Base  #擴(kuò)展了實(shí)例方法,可以通過(guò)Bus.new.show調(diào)用  
  13. end 

但是我們經(jīng)常有這樣的需要,希望基類(lèi)足夠強(qiáng)大,既可以擴(kuò)展實(shí)例方法,也可以擴(kuò)展類(lèi)方法,Ruby on Rails同樣提供了解決方案。

 
 
 
  1. Code  
  2. #基類(lèi)  
  3. module Base  
  4.   def show  
  5.     puts "You came here!"  
  6.   end  
  7.  
  8.   #擴(kuò)展類(lèi)方法  
  9.   def self.included(base)  
  10.     def base.call  
  11.       puts "I'm strong!"  
  12.     end  
  13.     base.extend(ClassMethods)  
  14.   end  
  15.  
  16.   #類(lèi)方法  
  17.   module ClassMethods  
  18.     def hello  
  19.       puts "Hello baby!"  
  20.     end  
  21.   end  
  22.      
  23. end  
  24.  
  25. class Bus  
  26.   include Base  
  27. end 

此時(shí)Bus已經(jīng)具備了實(shí)例方法show,類(lèi)方法:call 、hello,訪問(wèn)方式

 
 
 
  1. Bus.new.show  
  2. Bus.call  
  3. Bus.hello 

肯定也有人提出此類(lèi)疑問(wèn),使用extend能夠?qū)崿F(xiàn)此功能不?

答案是:暫未找到,如您找到請(qǐng)明示,多謝!

我也曾經(jīng)做過(guò)以下實(shí)驗(yàn),結(jié)果沒(méi)有成功,在此也張貼出來(lái),希望能給您帶來(lái)一些啟示。

 
 
 
  1. Code  
  2. #基類(lèi)  
  3. module Base  
  4.   def show  
  5.     puts "You came here!"  
  6.   end  
  7.     
  8.     #擴(kuò)展實(shí)例方法  
  9.   def self.extended(base)  
  10.     base.extend(InstanceMethods)  
  11.   end  
  12.  
  13.   module InstanceMethods  
  14.     def love  
  15.       puts 'We are instances,loving each other!'  
  16.     end  
  17.   end  
  18.  
  19. end  
  20.  
  21. class Car  
  22.   extend Base  
  23. end 

但是這樣,實(shí)例方法擴(kuò)展失敗,依然擴(kuò)展了類(lèi)方法

 
 
 
  1. Car.show  
  2. Car.love             #類(lèi)方法  
  3. Car.new.love      #undefined method 'love'  

【編輯推薦】

  1. Ruby語(yǔ)言的發(fā)展趨勢(shì)和啟示
  2. Ruby on Rails為企業(yè)SOA做好準(zhǔn)備了嗎
  3. 腳本語(yǔ)言排行榜 PHP、Ruby和Python領(lǐng)先
  4. 讓Ruby性能增加30%的改進(jìn)方法分析
  5. 對(duì)Ruby VS Java誤區(qū)的深度剖析

文章題目:淺談Ruby on Rails中的include和extend
URL標(biāo)題:http://www.5511xx.com/article/cdpceij.html