麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > Ruby > 正文

講解Ruby中Block和迭代器的使用方法

2020-02-24 15:38:53
字體:
供稿:網(wǎng)友

今天武林技術(shù)頻道小編和大家簡(jiǎn)單介紹一下Ruby的特性,其實(shí)這是一個(gè)非常強(qiáng)大的功能,今天是武林技術(shù)頻道小編和大家講解Ruby中Block和迭代器的使用方法,一起來學(xué)習(xí)一下吧!

可以用Block實(shí)現(xiàn)回調(diào)(但它比Java的匿名內(nèi)部(anonymous inner)類更簡(jiǎn)單),傳遞一組代碼(但它遠(yuǎn)比c的函數(shù)指針靈活),以及實(shí)現(xiàn)迭代器。

Block只是在花括號(hào)或者do...end之間的一組代碼。

ruby;">{puts "Hello"}             #this is a blockdo                      ###  club.enroll(person)            #and so is this person.socialize              #end                     ###

為什么有兩種分界符?部分原因是有人覺得有時(shí)候用一種分界符比另外一種感覺更自然。另外一部分原因是它們有不同的優(yōu)先級(jí):花括號(hào)比do/end綁定的更緊密些。我們嘗試遵循正在成為Ruby標(biāo)準(zhǔn)的一個(gè)約定俗成,單行block用花括號(hào),多行block用do/end。

一旦創(chuàng)建了block,就可以與方法的調(diào)用相關(guān)聯(lián)。把block的開始放在含有方法調(diào)用的源碼行的結(jié)尾處,就可以實(shí)現(xiàn)關(guān)聯(lián)。比如,在下面的代碼中,含有puts "Hi" 的block與greet方法的調(diào)用相關(guān)聯(lián)。

greet {puts "Hi"}

如果方法有參數(shù),它們出現(xiàn)在block之前。

verbose_greet("Dave","loyal customer"){puts "Hi"}

然后使用Ruby的yield語句,方法可以一次或多次地調(diào)用(invoke)相關(guān)聯(lián)的block。可以把yield想象成比如方法調(diào)用,它調(diào)用含有yield語句的方法所關(guān)聯(lián)的block。

下面的例子顯示了如何使用yield語句。定義了一個(gè)方法,它會(huì)調(diào)用yield兩次。然后調(diào)用這個(gè)方法,把block放在同一行,在方法調(diào)用之后(并在方法的所有參數(shù)之后)。

def call_block puts "Start of method" yield yield puts "End of method"endcall_block{puts "In the block"}

輸出結(jié)果:

 Strat of method In the block In the block End of method

可以提供參數(shù)給yield的調(diào)用;參數(shù)會(huì)傳遞到block中。在block中,豎線(|)之間給出參數(shù)名來接受這些來自yield的參數(shù)。

 def call_block  yield("Hello",99) end call_block {|str,num| ...}

在Ruby庫(kù)中大量使用了block來實(shí)現(xiàn)迭代器;迭代器是從某種收集(collection)如數(shù)組中連續(xù)返回元素的方法。

animals = %w(ant bee cat dog elk)  #創(chuàng)建一個(gè)數(shù)組animals.each{|animal| puts animal}  #迭代它的內(nèi)容

輸出結(jié)果:

antbeecatdogelk

讓我們看一下如何實(shí)現(xiàn)應(yīng)用在前面例子中的Array類中的each迭代器。each迭代器循環(huán)處理數(shù)組中的元素,對(duì)每個(gè)元素調(diào)用yield。在偽碼中,它可能寫成:

#在Array類中......def each for each element         #<--無效的Ruby語句  yield(element) endend

許多內(nèi)建于c和java等語言的循環(huán)結(jié)構(gòu)在Ruby中只是方法調(diào)用,這些方法會(huì)零次或多次地調(diào)用相關(guān)聯(lián)的block。

['cat','dog','horse'].each{|name| print name," "}5.times {print "*"}3.upto(6){|i| print i}('a'..'e').each{|char| print char}

輸出結(jié)果:

cat dog horse *****3456abcde

上面的代碼要求對(duì)象5 五次調(diào)用block;然后要求對(duì)象3調(diào)用一個(gè)block,并傳入一個(gè)連續(xù)的值,直到這個(gè)值到達(dá)6為止。最后對(duì)a到e的字符區(qū)間(range),使用each方法調(diào)用block。

看完上文講解Ruby中Block和迭代器的使用方法之后,是不是收獲頗豐,大家只要肯嘗試這些方法,一定可以順利進(jìn)行以后的工作!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 欧美特级一级毛片 | 99国产精品国产免费观看 | 黄污在线看 | 国产激情网 | 国产艳妇av视国产精选av一区 | 日韩av有码在线 | 在线成人一区二区 | 亚洲福利在线观看视频 | 免费国产成人高清在线看软件 | 欧美日韩高清一区 | 黑人日比视频 | 亚洲电影在线观看高清免费 | 久久亚洲线观看视频 | 黄色片免费看网站 | 蜜桃精品视频在线观看 | 国产精品一区久久久久 | 91av日韩 | 亚洲片在线观看 | 成人一级黄色大片 | 性欧美在线视频 | 久久婷婷一区二区三区 | 亚洲人成中文字幕在线观看 | 久久久精品精品 | 线观看免费完整aaa 一二区成人影院电影网 | 色女人在线 | 精品亚洲二区 | 天天看成人免费毛片视频 | 一级电影免费 | pornoⅹxxxxhd麻豆 | 久草在线免费看 | 日韩视频―中文字幕 | 91美女视频在线观看 | chinese hd xxxx tube| 国产免费高清 | 欧美在线观看黄色 | 久久影库 | 色综合久久久久久久久久久 | 粉嫩粉嫩一区二区三区在线播放 | 黄片毛片一级 | 午夜亚洲视频 | sese在线视频|