自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Ruby blocks提供靈活編碼手段

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

Ruby語言的出現(xiàn),改變了程序員傳統(tǒng)的編寫誒代碼方式,使編程人員在編寫代碼時(shí)會有一種非常愉悅的心情。在這里我們?yōu)榇蠹医榻B一種靈活編碼手段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這樣一個(gè)方法,可以按照指定條件對songs進(jìn)行遍歷,最終返回一個(gè)符合條件的個(gè)體。

下面就來看看這個(gè)方法到底是怎么實(shí)現(xiàn)的。

  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  

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

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

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

這里定義了名叫threeTimes的blocks, Ruby blocks中會重復(fù)3次外部的操作,當(dāng)row 6的代碼執(zhí)行后,會得到后面的結(jié)果:
Hello
Hello
Hello

可以看到blocks為我們提供了如此靈活的手段,其實(shí)他語言中需要通過代理或接口或函數(shù)指針來實(shí)現(xiàn)。
其實(shí).net 3.x以后的版本也提供了類似的功能,一個(gè)叫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來實(shí)現(xiàn)的話,將會是這樣:

  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 } 

正因?yàn)镽uby blocks如此方便,在閱讀ruby程序的時(shí)候,可以看到被廣泛的使用著。

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

2009-09-09 17:45:25

Ruby的blocks

2009-12-18 13:49:40

Ruby Watir

2010-09-13 10:00:51

CSS注釋

2010-07-27 09:06:11

Ruby on Rai

2020-04-08 12:50:29

Python編程語言開發(fā)

2012-05-10 11:40:49

存儲虛擬化

2016-01-04 11:04:17

Web開發(fā)Ruby

2012-09-28 09:52:13

2021-07-20 11:49:23

UPS電源數(shù)據(jù)中心電源管理

2020-06-11 09:32:39

數(shù)據(jù)中心IT技術(shù)

2015-05-07 11:22:25

思杰NetScaler

2010-04-15 03:51:34

惠普云計(jì)算擴(kuò)展

2021-11-11 15:48:43

加密貨幣區(qū)塊鏈貨幣

2020-04-07 10:23:26

數(shù)字化轉(zhuǎn)型財(cái)務(wù)管理CIO

2009-12-18 11:22:34

Ruby source

2016-11-04 22:18:23

VMware虛擬化

2013-11-11 16:20:01

戴爾

2015-02-11 10:21:07

JavaScript

2017-03-29 13:58:01

互聯(lián)網(wǎng)
點(diǎn)贊
收藏

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