成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發(fā) 開發(fā)工具
Ruby代碼塊可以依次在每個元素返回時被調(diào)用一次。它也可以被看做是迭代器的一種方法,比如可以貫穿在Ruby庫中,連續(xù)返回某種集合的元素。

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

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

Ruby代碼塊是用大括號或者do...end括起來的一系列代碼。

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

 

 

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

  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í)行兩次的,就是對yield的每一次調(diào)用。

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

 

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

 

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

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

 

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

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

 

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

 

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

 

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

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

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

 

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

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

責任編輯:曹凱 來源: 博客園
相關(guān)推薦

2009-12-18 16:12:11

Ruby加密

2009-12-18 17:01:37

Ruby基礎(chǔ)代碼

2024-03-11 08:11:27

Node.js.NET低代碼平臺

2009-12-17 09:49:18

Ruby代碼管理

2016-04-25 11:28:38

Ruby單行代碼

2009-12-17 17:04:09

Ruby函數(shù)參數(shù)傳遞

2009-12-18 16:00:29

Ruby獲取當前類名

2009-12-14 10:57:34

Ruby調(diào)試器

2011-03-25 10:25:30

同步方法同步代碼塊

2009-12-14 11:12:55

Ruby運行

2023-12-22 08:19:33

Dubbo遠程調(diào)用ID

2023-09-08 23:33:43

2009-12-15 19:18:39

Ruby源代碼

2009-11-16 16:17:45

PHP數(shù)組排序

2009-12-18 16:27:41

Ruby解析Json

2009-09-28 11:05:29

Ruby端口掃描

2009-12-18 17:29:02

Ruby創(chuàng)建XML

2020-04-02 15:39:51

代碼編譯器前端

2015-12-11 11:39:15

.net代碼

2015-12-11 11:49:19

java
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产精品久久在线观看 | 国产视频福利在线观看 | 久久99深爱久久99精品 | 欧美精品三区 | 久久精品综合 | 精品久久久久国产免费第一页 | 一区二区三区在线免费观看 | 中文字幕不卡一区 | 97碰碰碰| 欧美九九九 | 日韩在线视频一区 | 天天干天天操天天爽 | 一级黄色毛片 | 91毛片在线观看 | 久久av一区二区 | 美日韩免费视频 | 在线免费看91 | 日韩一区二区三区在线 | 欧美一区二区三区免费电影 | 久久国产婷婷国产香蕉 | 久久精品欧美一区二区三区不卡 | 久久69精品久久久久久久电影好 | 日本在线精品视频 | 欧美日韩综合精品 | 中文字幕久久精品 | 99re热精品视频国产免费 | 久久久国产一区 | 亚洲欧洲小视频 | 亚洲精品久久久久久久久久久久久 | 米奇7777狠狠狠狠视频 | 中文字幕一区二区三区不卡在线 | 翔田千里一区二区 | 国际精品鲁一鲁一区二区小说 | 国产成人精品一区二区三区视频 | 国产精品美女www爽爽爽 | 9久久精品| 亚洲精品一区二区三区蜜桃久 | 欧美成人精品一区二区男人看 | 国产成人精品一区二区三区 | 欧美黑人国产人伦爽爽爽 | 日本福利在线 |