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

目錄 搜尋
Ruby用戶指南 3、開(kāi)始 4、簡(jiǎn)單的例子 5、字符串 6、正則表達(dá)式 7、數(shù)組 8、回到那些簡(jiǎn)單的例子 9、流程控制 10、迭代器 11、面向?qū)ο笏季S 12、方法 13、類 14、繼承 15、重載方法 16、訪問(wèn)控制 17、單態(tài)方法 18、模塊 19、過(guò)程對(duì)象 20、變量 21、全局變量 22、實(shí)變量 23、局部變量 24、類常量 25、異常處理:rescue 26、異常處理:ensure 27、存取器 28、對(duì)象的初始化 29、雜項(xiàng) RGSS入門教程 1、什么是RGSS 2、開(kāi)始:最簡(jiǎn)單的腳本 3、數(shù)據(jù)類型:數(shù)字 4、數(shù)據(jù)類型:常量與變量 5、數(shù)據(jù)類型:字符串 6、控制語(yǔ)句:條件分歧語(yǔ)句 7、控制語(yǔ)句:循環(huán) 8、函數(shù) 9、對(duì)象與類 10、顯示圖片 11、數(shù)組 12、哈希表(關(guān)聯(lián)數(shù)組) 13、類 14、數(shù)據(jù)庫(kù) 15、游戲?qū)ο?/a> 16、精靈的管理 17、窗口的管理 18、活動(dòng)指令 19、場(chǎng)景類 Programming Ruby的翻譯 Programming Ruby: The Pragmatic Programmer's Guide 前言 Roadmap Ruby.new 類,對(duì)象和變量 容器Containers,塊Blocks和迭代Iterators 標(biāo)準(zhǔn)類型 深入方法 表達(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) 類和對(duì)象 (by jellen) Ruby安全 反射Reflection 內(nè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ì)象 執(zhí)行 結(jié)束時(shí)的相關(guān)處理 線程 安全模型 正則表達(dá)式 字句構(gòu)造 程序 變量和常數(shù) 字面值 操作符表達(dá)式 控制結(jié)構(gòu) 方法調(diào)用 類/方法的定義 內(nèi)部函數(shù) 內(nèi)部變量 內(nèi)部常數(shù) 內(nèi)部類/模塊/異常類 附加庫(kù) Ruby變更記錄 ruby 1.6 特性 ruby 1.7 特性 Ruby術(shù)語(yǔ)集 Ruby的運(yùn)行平臺(tái) pack模板字符串 sprintf格式 Marshal格式 Ruby FAQ Ruby的陷阱
文字

現(xiàn)在我們將前面的一些示例程序的代碼坼開(kāi)來(lái)分析一下.

下面的例子出現(xiàn)在簡(jiǎn)單的例子一節(jié).

def?fact(n)??
????if?n?==?0????
???????1??
????else????
???????n?*?fact(n-1)??
????end
end
print?fact(ARGV[0].to_i),?"\n"?

因?yàn)槭堑谝淮谓忉?我們將逐行分析.

def?fact(n)

第一行,def?用于定義一個(gè)函數(shù)(或者,更準(zhǔn)確地說(shuō),一個(gè)方法(method);我們會(huì)在稍后的一節(jié)中詳細(xì)討論什么是一個(gè)方法).這里,它指明?fact?函數(shù)帶一個(gè)參數(shù),也就是?n.

if?n?==?0

if?用來(lái)檢查一個(gè)條件.當(dāng)條件吻合時(shí),執(zhí)行下面的代碼;否則執(zhí)行跟在else后的代碼.

1?

當(dāng)條件成立時(shí)if?的值為?1.

else

如果條件不成立,執(zhí)行從這里到end的代碼.

n?*?fact(n-1)

如果條件不滿足,?if的值會(huì)是n乘fact(n-1)的結(jié)果.

end

第一個(gè)?end?與?if?語(yǔ)句對(duì)應(yīng).

end

第二個(gè)?end?與?def?語(yǔ)句對(duì)應(yīng).

print?fact(ARGV[0].to_i),?"\n"

這句用由命令行指定的值來(lái)調(diào)用fact()函數(shù)并打印結(jié)果.

ARGV是一個(gè)包含命令行參數(shù)的數(shù)組.ARGV的成員是字符串,所以我們必須通過(guò)to_i轉(zhuǎn)化其為整數(shù).?Ruby并不像Perl那樣自動(dòng)將字符串轉(zhuǎn)化為整數(shù).

Hmmm...如果向程序賦一個(gè)負(fù)值作為參數(shù)會(huì)怎樣?你看到這個(gè)問(wèn)題了嗎?你可以修復(fù)它嗎?

Strings

下面我們來(lái)檢查在字符串這章中出現(xiàn)的猜謎程序.由于這個(gè)要長(zhǎng)一點(diǎn),我們?yōu)槊恳恍写蛏闲袛?shù).

01?words?=?['foobar',?'baz',?'quux']
02?secret?=?words[rand(3)]
03
04?print?"guess??"
05?while?guess?=?STDIN.gets
06???guess.chop!
07???if?guess?==?secret
08?????print?"you?win\n"
09?????break
10???else
11?????print?"you?lose.\n"
12???end
13???print?"guess??"
14?end
15?print?"the?word?is?",?secret,?".\n"

這個(gè)程序里,我們使用了一個(gè)新的控制結(jié)構(gòu)?while.只要某個(gè)指定的條件保持為真,while和它對(duì)應(yīng)的end之間的代碼會(huì)重復(fù)執(zhí)行.

行2的rand(3)返回一個(gè)介于0-2之間的隨機(jī)數(shù).這個(gè)隨機(jī)數(shù)用于提取數(shù)組?words?中的一個(gè)成員.

在行5我們通過(guò)STDIN.gets方法從標(biāo)準(zhǔn)輸入讀取一行.如果讀行遇到時(shí)?EOF?(文件結(jié)束),?gets會(huì)返回nil.因此,與while相連的代碼會(huì)一直執(zhí)行直到它遇到^D(或DOS下的^Z),表示輸入的結(jié)束.

行6的guess.chop!去掉?guess?的最后一個(gè)字符;那一定是個(gè)換行符.

行15,我們打印出要猜的詞.我們寫的代碼是上向?print?語(yǔ)句傳遞三個(gè)參數(shù)(這三個(gè)參數(shù)一個(gè)接一個(gè)地打印),但也可以用一個(gè)參數(shù)等效地打印:?將secret寫為?#{secret}以表明將它是一個(gè)要取值的變量,而非一個(gè)要打印的一般文字:

print?"the?word?is?#{secret}.\n"?

正則表達(dá)式

最后我們來(lái)看看正則表達(dá)式一節(jié)的那個(gè)程序.


01?st?=?"\033[7m"
02?en?=?"\033[m"
03
04?while?TRUE
05???print?"str>?"
06???STDOUT.flush
07???str?=?gets
08???break?if?not?str
09???str.chop!
10???print?"pat>?"
11???STDOUT.flush
12???re?=?gets
13???break?if?not?re
14???re.chop!
15???str.gsub!?re,?"#{st}\\&#{en}"
16???print?str,?"\n"
17?end
18?print?"\n"

在行4,while的條件被硬設(shè)為?true,因此這好像構(gòu)成了一個(gè)無(wú)限循環(huán).但我們?cè)谛?和行13放置了break語(yǔ)句以跳出循環(huán).這兩個(gè)break語(yǔ)句也是?if?修飾辭(if?modifier)的一個(gè)例子.一個(gè)"if修飾辭"當(dāng)且僅當(dāng)指明條件滿足時(shí)執(zhí)行它左邊的語(yǔ)句.

再說(shuō)說(shuō)?chop!?(出現(xiàn)在行9和行14).在Ruby里,我們亦可將"!"和"?"附于某些方法名字后面.驚嘆號(hào)(!,有時(shí)大聲地念作"bang!")暗示某些東西可能具破壞性(destructive),也就是指,某些東西可以改變它所觸及的東西.?chop!直接作用于一個(gè)字符串,但不帶!的chop只會(huì)產(chǎn)生一個(gè)拷貝.下面有這一區(qū)別的演示.

ruby>?s1?=?"forth"
??"forth"
ruby>?s1.chop!???????#?This?changes?s1.
??"fort"
ruby>?s2?=?s1.chop???#?This?puts?a?changed?copy?in?s2,
??"for"
ruby>?s1?????????????#?...?without?disturbing?s1.
??"fort"


以后你還會(huì)遇見(jiàn)以問(wèn)號(hào)(?,有時(shí)大聲地念做?"huh?")結(jié)束的方法名;這指"斷言"(prediacte)方法,只會(huì)返回true或false.

行15應(yīng)給予注意.首先,注意gsub!也是一個(gè)破壞函數(shù).它通過(guò)替換所有符合?re?模式字符來(lái)修改?str(sub指替換,首字母?g?指全局,?比如,替換所有的匹配而不只是第一個(gè)匹配).到此為止,還好;但我們用什么來(lái)替代文本中的匹配部分呢??在行1和行2里的?st?和?en?被分別定義為表示反轉(zhuǎn)文本顏色(color-inverted)和恢復(fù)正常文本顏色的ANSI碼.?在行15,它們被#{}括起以確保他們被前面定義的那樣解釋(這樣我們才沒(méi)看見(jiàn)變量名被打印出來(lái)).在這中間是?"\\&".這是個(gè)小把戲.因?yàn)樘鎿Q字符串是由雙引號(hào)引起的,一對(duì)反斜杠會(huì)被解釋為一個(gè)單一的反斜杠;所以?gsub!實(shí)際上得到的是"\&",就一段特殊代碼正好就是表示"任何與模式于第一處匹配的字符".因此新的字符串在被打印出來(lái)的時(shí)候,很像原來(lái)的那個(gè),只不過(guò)匹配的部分以反視(inverse?video)的方式高亮度顯示出來(lái). 版權(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ì)盡快更正。 ?
上一篇: 下一篇: