av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

Ruby代碼塊實(shí)現(xiàn)傳遞代碼

Ruby語(yǔ)言中有許多和其他語(yǔ)言不通的特性,值得我們?cè)趯W(xué)習(xí)和實(shí)踐中去深入的探討。比如今天我們?yōu)榇蠹医榻B的Ruby代碼塊,就是一個(gè)功能強(qiáng)大的一系列代碼應(yīng)用。#t#

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供大石橋網(wǎng)站建設(shè)、大石橋做網(wǎng)站、大石橋網(wǎng)站設(shè)計(jì)、大石橋網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、大石橋企業(yè)網(wǎng)站模板建站服務(wù),10多年大石橋做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

Ruby代碼塊可以和方法調(diào)用關(guān)聯(lián)的一系列代碼,就好像這些代碼是方法的參數(shù)一樣,這是一個(gè)令人難以置信的強(qiáng)大特性。你可以使用代碼塊實(shí)現(xiàn)回調(diào)(但不像Java的匿名內(nèi)部類那么簡(jiǎn)單),傳遞一系列代碼(但要比C的函數(shù)指針更加復(fù)雜),和實(shí)現(xiàn)迭代器。

Ruby代碼塊是用大括號(hào)或者do...end括起來(lái)的一系列代碼。

  1. { puts "Hello" } 
    # 這是一個(gè)代碼塊  
  2. do #    
  3. club.enroll(person)  
  4.  # 這也是代碼塊    
  5. person.socialize #    
  6. end  

一旦你創(chuàng)建了一個(gè)代碼塊,就可以把它和一個(gè)方法調(diào)用關(guān)聯(lián)在一起。那個(gè)方法能夠調(diào)用代碼塊一次或者更多次,用Ruby的yield語(yǔ)句。下面的例子顯示了這個(gè)過(guò)程。我們定義一個(gè)方法,這個(gè)方法調(diào)用yield兩次。然后我們調(diào)用這個(gè)方法,把代碼塊放在同一行中方法調(diào)用的后面(也是方法的所有參數(shù)的后面)。[有些人喜歡把和方法關(guān)聯(lián)的Ruby代碼塊當(dāng)作是一種傳遞過(guò)來(lái)的參數(shù)。它們雖然是一個(gè)級(jí)別的,但這沒(méi)有顯示出所有的內(nèi)涵。***把代碼塊和方法當(dāng)成是協(xié)同工作的關(guān)系,在它們之間控制在來(lái)回交換。

 
 
 
  1. def callBlock  
  2. yield  
  3. yield  
  4. end  
  5. callBlock { puts "In the block" } 

結(jié)果:
In the block
In the block

看看Ruby代碼塊中的代碼(puts "In the block") 是如何被執(zhí)行兩次的,就是對(duì)yield的每一次調(diào)用。

你可以在調(diào)用yield時(shí)給出參數(shù),這些參數(shù)傳遞給代碼塊。在代碼塊中,列舉變量的名字來(lái)接受參數(shù),這些參數(shù)被用"|"括著。

 
 
 
  1. def callBlock  
  2. yield ,   
  3. end  
  4. callBlock { |, | ... }  

Ruby代碼塊貫穿在實(shí)現(xiàn)迭代器的Ruby庫(kù)中,迭代器就是一種方法,用來(lái)連續(xù)返回某種集合的元素,比如一個(gè)數(shù)組。

 
 
 
  1. a = %w( ant bee cat dog elk )
     # 創(chuàng)建一個(gè)數(shù)組  
  2. a.each { |animal| puts animal }
     # 迭代所有的內(nèi)容  
  3. produces:   
  4. ant  
  5. bee  
  6. cat  
  7. dog  
  8. elk 

我們來(lái)看看實(shí)現(xiàn)Array類的each迭代器的可能的方法,我們要用到前面的例子。each迭代器遍歷數(shù)組的每個(gè)元素,每次都調(diào)用yield,類似的代碼可能會(huì)是下面這樣:

 
 
 
  1. # 在Array類中...  
  2. def each  
  3. for each element  
  4. yield(element)  
  5. end  
  6. end 

這樣你就可以使用數(shù)組的each方法來(lái)迭代數(shù)組元素提供給代碼塊,Ruby代碼塊依次在每個(gè)元素返回時(shí)被調(diào)用一次。

 
 
 
  1. [ 'cat', 'dog', 'horse' ]
    .each do |animal|  
  2. print animal, " -- "  
  3. end  

結(jié)果:
cat -- dog -- horse --

類似的,內(nèi)置在語(yǔ)言比如C或者Java中的許多循環(huán)結(jié)構(gòu)在Ruby中就是簡(jiǎn)單的方法調(diào)用,這個(gè)方法調(diào)用所關(guān)聯(lián)的代碼塊0次或者更多次。

 
 
 
  1. 5.times { print "*" }  
  2. 3.upto(6) {|i| print i }
     //puts是每打印一個(gè)就有回車的,print沒(méi)有  
  3. ('a'..'e').each {|char| print char } 

結(jié)果:
*****3456abcde

在這里,我們讓數(shù)字5調(diào)用一個(gè)代碼塊5次,然后讓數(shù)字3調(diào)用一個(gè)Ruby代碼塊,傳遞給它連續(xù)的數(shù)值直到6,***,字符"a"到"e"的區(qū)間使用each方法調(diào)用一個(gè)塊。


網(wǎng)站欄目:Ruby代碼塊實(shí)現(xiàn)傳遞代碼
文章網(wǎng)址:http://uogjgqi.cn/article/cossegi.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流