国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ディレクトリ 検索
Ruby用戶(hù)指南 3、開(kāi)始 4、簡(jiǎn)單的例子 5、字符串 6、正則表達(dá)式 7、數(shù)組 8、回到那些簡(jiǎn)單的例子 9、流程控制 10、迭代器 11、面向?qū)ο笏季S 12、方法 13、類(lèi) 14、繼承 15、重載方法 16、訪問(wèn)控制 17、單態(tài)方法 18、模塊 19、過(guò)程對(duì)象 20、變量 21、全局變量 22、實(shí)變量 23、局部變量 24、類(lèi)常量 25、異常處理:rescue 26、異常處理:ensure 27、存取器 28、對(duì)象的初始化 29、雜項(xiàng) RGSS入門(mén)教程 1、什么是RGSS 2、開(kāi)始:最簡(jiǎn)單的腳本 3、數(shù)據(jù)類(lèi)型:數(shù)字 4、數(shù)據(jù)類(lèi)型:常量與變量 5、數(shù)據(jù)類(lèi)型:字符串 6、控制語(yǔ)句:條件分歧語(yǔ)句 7、控制語(yǔ)句:循環(huán) 8、函數(shù) 9、對(duì)象與類(lèi) 10、顯示圖片 11、數(shù)組 12、哈希表(關(guān)聯(lián)數(shù)組) 13、類(lèi) 14、數(shù)據(jù)庫(kù) 15、游戲?qū)ο?/a> 16、精靈的管理 17、窗口的管理 18、活動(dòng)指令 19、場(chǎng)景類(lèi) Programming Ruby的翻譯 Programming Ruby: The Pragmatic Programmer's Guide 前言 Roadmap Ruby.new 類(lèi),對(duì)象和變量 容器Containers,塊Blocks和迭代Iterators 標(biāo)準(zhǔn)類(lèi)型 深入方法 表達(dá)式Expressions 異常,捕捉和拋出(已經(jīng)開(kāi)始,by jellen) 模塊 基本輸入輸出 線程和進(jìn)程 當(dāng)遭遇挫折 Ruby和它的世界 Ruby和Web開(kāi)發(fā) Ruby Tk Ruby 和微軟的 Windows 擴(kuò)展Ruby Ruby語(yǔ)言 (by jellen) 類(lèi)和對(duì)象 (by jellen) Ruby安全 反射Reflection 內(nèi)建類(lèi)和方法 標(biāo)準(zhǔn)庫(kù) OO設(shè)計(jì) 網(wǎng)絡(luò)和Web庫(kù) Windows支持 內(nèi)嵌文檔 交互式Ruby Shell 支持 Ruby參考手冊(cè) Ruby首頁(yè) 卷首語(yǔ) Ruby的啟動(dòng) 環(huán)境變量 對(duì)象 類(lèi) 執(zhí)行 結(jié)束時(shí)的相關(guān)處理 線程 安全模型 正則表達(dá)式 字句構(gòu)造 程序 變量和常數(shù) 字面值 操作符表達(dá)式 控制結(jié)構(gòu) 方法調(diào)用 類(lèi)/方法的定義 內(nèi)部函數(shù) 內(nèi)部變量 內(nèi)部常數(shù) 內(nèi)部類(lèi)/模塊/異常類(lèi) 附加庫(kù) Ruby變更記錄 ruby 1.6 特性 ruby 1.7 特性 Ruby術(shù)語(yǔ)集 Ruby的運(yùn)行平臺(tái) pack模板字符串 sprintf格式 Marshal格式 Ruby FAQ Ruby的陷阱
テキスト

迭代器并不是Ruby發(fā)明的.它廣泛地運(yùn)用于各種面向?qū)ο笳Z(yǔ)言.在Lisp中也有,只是不這么叫罷了.盡管如此,迭代器的概念并不為許多人熟悉,因此我們將在此做較為詳細(xì)的介紹.

你知道,動(dòng)詞?iterate?的意思是做同一件事許多遍,因此,iterator就是用來(lái)將同一件事做許多次的東西.

當(dāng)我們寫(xiě)代碼時(shí),我們需要各種環(huán)境下的循環(huán).在C里,我們用for或者while.比如,

char?*str;
for?(str?=?"abcdefg";?*str?!=?'\0';?str++)?{
??/*?process?a?character?here?*/
}

C的for(...)語(yǔ)法提供了一種寫(xiě)循環(huán)的抽象方法,但測(cè)試?*str?是否為空(null)字符需要程序員了解字符串內(nèi)部結(jié)構(gòu)的細(xì)節(jié).這讓C看起來(lái)像低級(jí)(low-level)語(yǔ)言.更高級(jí)的語(yǔ)言是通過(guò)它們更具彈性的迭代器支持來(lái)實(shí)現(xiàn)的.考慮下面的?sh?命令行腳本:

#!/bin/sh
for?i?in?*.[ch];?do??
??????#?...?here?would?be?something?to?do?for?each?file
done

當(dāng)前目錄下所有的C源文件和頭文件都將被處理,由命令行shell來(lái)一個(gè)個(gè)地?fù)烊∥募⑻幚砥渲械募?xì)節(jié).我想這是在比?C?要高的級(jí)別上工作,你覺(jué)得呢?

但有更多值得我們考慮的:在一種語(yǔ)言能夠很好的給內(nèi)建的數(shù)據(jù)類(lèi)型的提供迭代器的同時(shí),我們卻仍需要回去用低級(jí)別的循環(huán)語(yǔ)言來(lái)實(shí)現(xiàn)對(duì)自己定義的數(shù)據(jù)類(lèi)型的迭代,這真是讓人失望.在面對(duì)對(duì)象編程時(shí),用戶(hù)經(jīng)常一個(gè)接一個(gè)地定義數(shù)據(jù)類(lèi)型,因此這是一個(gè)很?chē)?yán)重的問(wèn)題.

因此,所有的OOP語(yǔ)言都包含了一定的迭代器機(jī)制.某些語(yǔ)言為此提供一種特殊的類(lèi);Ruby則允許我們直接定義迭代器.

Ruby的String類(lèi)型有很多有用的迭代器:

ruby>?"abc".each_byte{|c|?printf?"<%c>",?c};?print?"\n"
<a><b><c>
???nil

each_byte?是個(gè)用于字符串中每個(gè)字符的迭代器.每個(gè)字符串由局部變量c代替.這可以翻譯為類(lèi)似C的代碼...

ruby>?s="abc";i=0
???0
ruby>?while?i<s.length
????|????printf?"<%c>",?s[i];?i+=1
????|?end;?print?"\n"
<a><b><c>
???nil

...然而,?each_byte?迭代器在概念上要簡(jiǎn)單些,而且即使以后?String?類(lèi)突然有所改變也應(yīng)該可以照樣工作.使用迭代器的一個(gè)好處便是在此類(lèi)改變中仍然可以保持健壯;一般的,它的確是好代碼的一個(gè)特點(diǎn).(好,請(qǐng)有點(diǎn)兒耐心,我們將會(huì)馬上談到什么是類(lèi))

String的另一個(gè)迭代器是?each_line.

ruby>?"a\nb\nc\n".each_line{|l|?print?l}
a
b
c
???nil

采用迭代器,這將很輕松的取代C的大多數(shù)編程效果(找換行符,生成子串等等)

前面出現(xiàn)的for語(yǔ)句通過(guò)each迭代器實(shí)現(xiàn)迭代功能.?String的each和each_line的工作原理差不多,讓我們用for重寫(xiě)上面的例子:

ruby>?for?l?in?"a\nb\nc\n"
????|???print?l?
????|?end
a
b
c
???nil

我們可以用retry流程控制語(yǔ)句連接迭代循環(huán),它會(huì)從頭執(zhí)行當(dāng)前循環(huán)的迭代.

ruby>?c=0
???0
ruby>?for?i?in?0..4
????|???print?i
????|???if?i?==?2?and?c?==?0
????|?????c?=?1
????|?????print?"\n"
????|?????retry
????|???end
????|?end;?print?"\n"
012
01234
???nil

yield有時(shí)會(huì)在一個(gè)迭代器的定義中出現(xiàn).?yield將流程控制移至傳遞給迭代器的代碼域(這將會(huì)在過(guò)程對(duì)象那一節(jié)介紹更多的細(xì)節(jié)).下面的例子定義了一個(gè)repeat迭代器,會(huì)依參數(shù)的設(shè)置執(zhí)行多次代碼域.

ruby>?def?repeat(num)
????|???while?num?>?0
????|?????yield
????|?????num?-=?1
????|???end
????|?end
???nil
ruby>?repeat(3)?{?print?"foo\n"?}
foo
foo
foo
???nil

利用retry,我們可以定義一個(gè)有while相同作用的迭代器,雖然在實(shí)際應(yīng)用中它太慢了.

ruby>?def?WHILE(cond)
????|???return?if?not?cond
????|???yield
????|???retry
????|?end
???nil
ruby>?i=0;?WHILE(i<3)?{?print?i;?i+=1?}
012???nil

搞懂什么是迭代器了嗎?有一些限制,但你可以寫(xiě)自己的迭代器;實(shí)際上,當(dāng)你定義一個(gè)新的數(shù)據(jù)類(lèi)型時(shí),為它定義一個(gè)合適的迭代器經(jīng)常也很方便.這樣看來(lái),上面的例子并不是很好用.在我們理解了類(lèi)以后,我們可以討論討論更具實(shí)際意義的迭代器. 版權(quán)聲明:RUBY文檔中心的所有文章標(biāo)明[原創(chuàng)]的均為本站作品,版權(quán)屬RUBY中文化計(jì)劃,若轉(zhuǎn)載請(qǐng)注明;標(biāo)明[翻譯]的其外文版權(quán)歸原作者,譯文版權(quán)屬RUBY中文化計(jì)劃;標(biāo)明[轉(zhuǎn)貼]的,若原作者感到侵犯了他的著作權(quán),那么請(qǐng)及時(shí)跟主持人聯(lián)系,我們會(huì)盡快更正。 ?
前の記事: 次の記事: