今天給大家介紹一下靈活編碼手段Ruby blocks如何理解。文章的內(nèi)容小編覺得不錯,現(xiàn)在給大家分享一下,覺得有需要的朋友可以了解一下,希望對大家有所幫助,下面跟著小編的思路一起來閱讀吧。
榆次網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站建設等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)從2013年開始到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)。
Ruby語言的出現(xiàn),改變了程序員傳統(tǒng)的編寫誒代碼方式,使編程人員在編寫代碼時會有一種非常愉悅的心情。在這里我們?yōu)榇蠹医榻B一種靈活編碼手段Ruby blocks。
先來看一下這段代碼:
class SongList
def [](key)
return @songs[key] if
key.kind_of?(Integer)
return @songs.find {
|aSong| aSong.name == key }
end
end
在第四行中,有find這樣一個方法,可以按照指定條件對songs進行遍歷,最終返回一個符合條件的個體。
下面就來看看這個方法到底是怎么實現(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這個類中,增加了一個method,在method中嵌入了一個遍歷操作。如果只是這樣的話,那么ruby和其他語言也就沒有什么差別了,我們注意到第5行中有yield,這么一個東東。其實他起到了一個代理的作用,實現(xiàn)了實際操作部分和遍歷的分離。
再看看下面這個例子,來了解一下yield的功能。
1def threeTimes yield yield yield end threeTimes { puts "Hello" }
這里定義了名叫threeTimes的blocks, Ruby blocks中會重復3次外部的操作,當row 6的代碼執(zhí)行后,會得到后面的結(jié)果:
Hello
Hello
Hello
可以看到blocks為我們提供了如此靈活的手段,其實他語言中需要通過代理或接口或函數(shù)指針來實現(xiàn)。
其實.net 3.x以后的版本也提供了類似的功能,一個叫LINQ(Language Integrated Query )的東東。
可以使用類似SQL的方式過濾集合
LINQ Query:
string[] names = { "Geoff",
"Jessica", "Mike", "Megan","Priscilla", "Jack", "Alma" };
IEnumerable
expr =
from s in nameswhere s.Length == 5
orderby s
select s.ToUpper();
foreach (string item in expr)
Console.WriteLine(item);
上面的用法是不是很簡潔方便?用ruby來實現(xiàn)的話,將會是這樣:
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 }
正因為Ruby blocks如此方便,在閱讀ruby程序的時候,可以看到被廣泛的使用著。
以上就是靈活編碼手段Ruby blocks如何理解的全部內(nèi)容了,更多與靈活編碼手段Ruby blocks如何理解相關的內(nèi)容可以搜索創(chuàng)新互聯(lián)之前的文章或者瀏覽下面的文章進行學習哈!相信小編會給大家增添更多知識,希望大家能夠支持一下創(chuàng)新互聯(lián)!