您好,登錄后才能下訂單哦!
今天給大家介紹一下靈活編碼手段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)看一下這段代碼:
class SongList
def [](key)
return @songs[key] if
key.kind_of?(Integer)
return @songs.find {
|aSong| aSong.name == key }
end
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ò)濾集合
LINQ Query:
string[] names = { "Geoff",
"Jessica", "Mike", "Megan","Priscilla", "Jack", "Alma" };
IEnumerable<string> expr =
from s in nameswhere s.Length == 5
orderby s
select s.ToUpper();
foreach (string item in expr)
Console.WriteLine(item);
上面的用法是不是很簡(jiǎn)潔方便?用ruby來(lái)實(shí)現(xiàn)的話(huà),將會(huì)是這樣:
names = [ "Geoff", "Jessica",
"Mike", "Megan", "Priscilla","Jack", "Alma" ]
expr = names.select {
|n| n.length == 5
}.sort.collect { |n| n.upcase }
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í),希望大家能夠支持一下億速云!
免責(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)容。