溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

靈活編碼手段Ruby blocks如何理解

發(fā)布時(shí)間:2022-01-11 15:36:10 來(lái)源:億速云 閱讀:122 作者:柒染 欄目:編程語(yǔ)言

今天給大家介紹一下靈活編碼手段Ruby blocks如何理解。文章的內(nèi)容小編覺(jué)得不錯(cuò),現(xiàn)在給大家分享一下,覺(jué)得有需要的朋友可以了解一下,希望對(duì)大家有所幫助,下面跟著小編的思路一起來(lái)閱讀吧。

Ruby語(yǔ)言的出現(xiàn),改變了程序員傳統(tǒng)的編寫(xiě)誒代碼方式,使編程人員在編寫(xiě)代碼時(shí)會(huì)有一種非常愉悅的心情。在這里我們?yōu)榇蠹医榻B一種靈活編碼手段Ruby blocks。

先來(lái)看一下這段代碼:

  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è)方法,可以按照指定條件對(duì)songs進(jìn)行遍歷,最終返回一個(gè)符合條件的個(gè)體。

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

class Array   def find   for i in 0size   value = self[i]   return value if yield(value)   end   return nil   end   end

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

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

1def threeTimes  yield  yield  yield  end  threeTimes { puts "Hello" }

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

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

  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); 

上面的用法是不是很簡(jiǎn)潔方便?用ruby來(lái)實(shí)現(xiàn)的話(huà),將會(huì)是這樣:

  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í)候,可以看到被廣泛的使用著。

以上就是靈活編碼手段Ruby blocks如何理解的全部?jī)?nèi)容了,更多與靈活編碼手段Ruby blocks如何理解相關(guān)的內(nèi)容可以搜索億速云之前的文章或者瀏覽下面的文章進(jìn)行學(xué)習(xí)哈!相信小編會(huì)給大家增添更多知識(shí),希望大家能夠支持一下億速云!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI