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

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

前面,我們說Ruby沒有函數(shù),只有方法.而且實(shí)際上有不止一種方法.這一節(jié)我們介紹訪問控制(access?controls).?

想想當(dāng)我們在"最高層"而不是在一個(gè)類的定義里定義一個(gè)方法時(shí)會(huì)發(fā)生什么.我們可以把這樣的方法設(shè)想為在像C那樣的傳統(tǒng)語言中的函數(shù)的類似物.

ruby>?def?square(n)
????|???n?*?n
????|?end
???nil
ruby>?square(5)
???25?

我們的新方法看起來不屬于任何類,但實(shí)際上Ruby將其分給Object類,也就是所有其它類的父類.因此,所有對象現(xiàn)在都可以使用這一方法.這本應(yīng)是正確的,但有個(gè)小陷阱:它是所有類的私有(private)方法.我們將在下面討論這是什么意思,但一個(gè)結(jié)果是它只能以函數(shù)的風(fēng)格調(diào)用,像這樣:

ruby>?class?Foo
????|???def?fourth_power_of(x)
????|?????square(x)?*?square(x)
????|???end
????|?end
??nil
ruby>?Foo.new.fourth_power_of?10
??10000?

我們不允許向一個(gè)對象明確地運(yùn)用這一方法:

ruby>?"fish".square(5)
ERR:?(eval):1:?private?method?`square'?called?for?"fish":String?

這一聰明的做法在?ruby?使得提供可以像在傳統(tǒng)語言中那樣運(yùn)用函數(shù)的同時(shí)保持了?ruby?的純OO性質(zhì)(函數(shù)仍是對象方法,但接受者隱式的為self).

在OO編程里,有一個(gè)不成文的習(xí)慣,我們在前面的章節(jié)里有所暗示的,即有關(guān)規(guī)格(specification)和實(shí)現(xiàn)(implementation)的區(qū)別,或者說對象被要求完成什么任務(wù)和實(shí)際上它是怎樣完成的.對象的內(nèi)部工作應(yīng)該對用戶保持隱蔽;他們應(yīng)該只關(guān)心輸入什么和輸出什么,并相信對象知道它在內(nèi)部是在做什么.如此,某些外面世界看不見但卻在內(nèi)部使用(并可以由程序員在任何需要的時(shí)候改進(jìn),而不用改變用戶看到的類的對象)的方法將很有用.在下面這個(gè)普通的例子里,你可以把engine看作類的內(nèi)部隱式方法.

ruby>?class?Test
????|???def?times_two(a)
????|?????print?a,"?times?two?is?",engine(a),"\n"
????|???end
????|???def?engine(b)
????|?????b*2
????|???end
????|???private:engine??#?this?hides?engine?from?users
????|?end
???Test
ruby>?test?=?Test.new
???#<Test:0x4017181c>
ruby>?test.engine(6)
ERR:?(eval):1:?private?method?`engine'?called?for?#<Test:0x4017181c>
ruby>?test.times_two(6)
6?times?two?is?12.
???nil?

開始時(shí),我們本希望test.engine(6)返回12,但隨后當(dāng)我們扮演一個(gè)Test對象用戶時(shí)我們了解到engine是不可訪問的(inaccessible).只有Test的其它方法,像?times_two可以使用?engine.我們被要求保持程序的外部接口,也就是?times_two這些方法.管理此類的程序員可以自由的更改engine(這里,可能把b*2改為b+b,假設(shè)這樣可以提高性能)而不影響用戶與?Test?對象打交道.這個(gè)例子當(dāng)然過于簡單;訪問控制的優(yōu)點(diǎn)只有當(dāng)我們開始寫更復(fù)雜和有趣的類時(shí)方能顯現(xiàn)出來. 版權(quán)聲明:RUBY文檔中心的所有文章標(biāo)明[原創(chuàng)]的均為本站作品,版權(quán)屬RUBY中文化計(jì)劃,若轉(zhuǎn)載請注明;標(biāo)明[翻譯]的其外文版權(quán)歸原作者,譯文版權(quán)屬RUBY中文化計(jì)劃;標(biāo)明[轉(zhuǎn)貼]的,若原作者感到侵犯了他的著作權(quán),那么請及時(shí)跟主持人聯(lián)系,我們會(huì)盡快更正。 ?
上一篇: 下一篇: