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

Ruby blocks提供靈活編碼手段

開發 后端
Ruby blocks在實際編程中被廣泛的使用著。它能夠給我們帶來非常方便的編碼方式。希望這篇文章可以幫助我們深入了解Ruby blocks的用法。

Ruby語言的出現,改變了程序員傳統的編寫誒代碼方式,使編程人員在編寫代碼時會有一種非常愉悅的心情。在這里我們為大家介紹一種靈活編碼手段Ruby blocks。#t#

先來看一下這段代碼:

  1. class SongList  
  2. def [](key)  
  3. return @songs[key] if 
    key.kind_of?(Integer)  
  4. return @songs.find { 
    |aSong| 
    aSong.name == key }  
  5. end  
  6. end 

在第四行中,有find這樣一個方法,可以按照指定條件對songs進行遍歷,最終返回一個符合條件的個體。

下面就來看看這個方法到底是怎么實現的。

  1. class Array   
  2. def find   
  3. for i in 0size   
  4. value = self[i]   
  5. return value if yield(value)   
  6. end   
  7. return nil   
  8. end   
  9. end  

發現是在Array這個類中,增加了一個method,在method中嵌入了一個遍歷操作。如果只是這樣的話,那么ruby和其他語言也就沒有什么差別了,我們注意到第5行中有yield,這么一個東東。其實他起到了一個代理的作用,實現了實際操作部分和遍歷的分離。

再看看下面這個例子,來了解一下yield的功能。

  1. 1def threeTimes  
  2. yield  
  3. yield  
  4. yield  
  5. end  
  6. threeTimes { puts "Hello" } 

這里定義了名叫threeTimes的blocks, Ruby blocks中會重復3次外部的操作,當row 6的代碼執行后,會得到后面的結果:
Hello
Hello
Hello

可以看到blocks為我們提供了如此靈活的手段,其實他語言中需要通過代理或接口或函數指針來實現。
其實.net 3.x以后的版本也提供了類似的功能,一個叫LINQ(Language Integrated Query )的東東。
可以使用類似SQL的方式過濾集合

 

  1. LINQ Query:  
  2. string[] names = { "Geoff", 
    "Jessica", "Mike", "Megan",  
  3. "Priscilla", "Jack", "Alma" };  
  4. IEnumerable<string> expr = 
    from s in names  
  5. where s.Length == 5  
  6. orderby s  
  7. select s.ToUpper();  
  8. foreach (string item in expr)  
  9. Console.WriteLine(item); 

 

上面的用法是不是很簡潔方便?用ruby來實現的話,將會是這樣:

  1. names = [ "Geoff", "Jessica", 
    "Mike", "Megan", "Priscilla",  
  2. "Jack", "Alma" ]   
  3. expr = names.select {  
  4. |n| n.length == 5  
  5. }.sort.collect { |n| n.upcase }  
  6. expr.each {|n| puts n } 

正因為Ruby blocks如此方便,在閱讀ruby程序的時候,可以看到被廣泛的使用著。

責任編輯:曹凱 來源: 博客園
相關推薦

2009-09-09 17:45:25

Ruby的blocks

2009-12-18 13:49:40

Ruby Watir

2010-09-13 10:00:51

CSS注釋

2012-05-10 11:40:49

存儲虛擬化

2020-04-08 12:50:29

Python編程語言開發

2010-07-27 09:06:11

Ruby on Rai

2012-09-28 09:52:13

2016-01-04 11:04:17

Web開發Ruby

2021-07-20 11:49:23

UPS電源數據中心電源管理

2015-05-07 11:22:25

思杰NetScaler

2020-06-11 09:32:39

數據中心IT技術

2010-04-15 03:51:34

惠普云計算擴展

2020-04-07 10:23:26

數字化轉型財務管理CIO

2016-11-04 22:18:23

VMware虛擬化

2021-11-11 15:48:43

加密貨幣區塊鏈貨幣

2009-12-18 11:22:34

Ruby source

2013-11-11 16:20:01

戴爾

2015-02-11 10:21:07

JavaScript
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产女人与拘做视频免费 | 国产一在线| 午夜资源 | 久久国产三级 | 欧美13videosex性极品 | 亚洲国产成人精品女人久久久野战 | 国产91在线观看 | 一区二区三区高清 | 久久大 | 99热热热| 国产日韩精品一区 | 香蕉久久网| av免费网址 | 成人亚洲精品久久久久软件 | 免费一区二区三区 | 国产免费自拍 | 91亚洲免费| 欧美日韩在线一区 | 黄色免费观看网站 | 国产成人精品综合 | 欧美一区在线视频 | 91福利在线导航 | 亚洲乱码一区二区三区在线观看 | 91久久精品国产91久久 | 一区二区三区免费在线观看 | 久久久免费毛片 | 九九99靖品 | 亚洲国产一区在线 | 亚洲精品国产一区 | 精品国产31久久久久久 | 国产在线a | 国产人成在线观看 | 国产午夜精品一区二区三区四区 | 欧美色性 | 色999视频 | 蜜桃在线视频 | 日韩高清中文字幕 | 精品日韩一区二区三区 | 99tv| 国产中文字幕av | 久久99精品久久久久久国产越南 |