Terry七月Ruby讀書(shū)筆記(比較詳細(xì))第2/4頁(yè)
Page 40
面向?qū)ο?/B>
2008/7/13
1. 消息機(jī)制:對(duì)象通過(guò)消息影響對(duì)象,對(duì)象即類(lèi)的實(shí)例。誰(shuí),將被影響?
2. Object:東西,物體,客體。
3. Class:種類(lèi),等級(jí),階級(jí);
4 動(dòng)態(tài)語(yǔ)言:人們可以決定代碼世界中一類(lèi)事物的屬性、方法,當(dāng)然可以修改代碼世界中一類(lèi)事物的屬性、方法,而且可以委托其它的類(lèi)來(lái)修改,甚至刪除。這是動(dòng)態(tài)語(yǔ)言超越靜態(tài)語(yǔ)言之處。由于代碼是一直運(yùn)行著,與其它代碼一直交互著,修改、刪除應(yīng)該慎重,避免產(chǎn)生副作用。
5 封裝
注意:
類(lèi)名首字母要大寫(xiě);
實(shí)例變量用@開(kāi)頭;
方法名或者參數(shù)名用小寫(xiě)字母或者下劃線開(kāi)頭。
6 initialize是初始化方法
p2.motherland="ABC" #以賦值,因?yàn)橛袑?duì)應(yīng)的setter方法。
|
setter: |
getter: |
|
attr_writer:motherland相當(dāng)于 |
attr_reader:motherland相當(dāng)于 |
|
def motherland=(value) return @motherland=value end |
def motherland return @motherland end |
attr_accessor :motherland
相當(dāng)于 attr_reader:motherland; attr_writer :motherland
7.繼承
class 子類(lèi)<父類(lèi)
子類(lèi)繼承父類(lèi):
重寫(xiě)方法;
添加方法;
增強(qiáng)父類(lèi)方法(super)。
Ruby語(yǔ)言已經(jīng)定義了一個(gè)類(lèi)Object,如果你在定義新類(lèi)的時(shí)候,沒(méi)有指明新類(lèi)的父類(lèi),那么,Ruby解釋器認(rèn)為,新類(lèi)的父類(lèi)是 Object 類(lèi)。類(lèi)Object 含有new方法、initialize 方法…只要你不重寫(xiě)這些方法,你就自然在使用類(lèi)Object 的方法。
你寫(xiě)一個(gè)類(lèi)的時(shí)候,是在創(chuàng)造一類(lèi)事物的藍(lán)圖;當(dāng)你new的時(shí)候,一個(gè)實(shí)例就按照藍(lán)圖生成了。
Ruby沒(méi)有析構(gòu)函數(shù),使用垃圾收集器自動(dòng)回收實(shí)例占用的資源。
8.多態(tài)
父類(lèi)子類(lèi)的行為差異,不同子類(lèi)的行為差異,就是多態(tài)
Ruby語(yǔ)言,只有重寫(xiě)(override),沒(méi)有其它語(yǔ)言具有的嚴(yán)格意義上的重載(overload)。Ruby語(yǔ)言有自己的單例方法,還有模塊插入(Mix-in)。
插曲
http://liubin.itpub.net/post/325/15623
覆蓋 override:
Overriding 也許叫做overwriting更合適,
OVERLOAD覆蓋是指在子類(lèi)(c++中的派生類(lèi)) 中重新定義父類(lèi)的函數(shù),其函數(shù)名、參數(shù)列、返回值類(lèi)型必須同父類(lèi)中的相對(duì)應(yīng)被覆蓋的函數(shù)嚴(yán)格一致,覆蓋函數(shù)和被覆蓋函數(shù)只有函數(shù)體(花括號(hào)中的部分)不同,當(dāng)派生類(lèi)對(duì)象調(diào)用子類(lèi)中該同名函數(shù)時(shí)會(huì)自動(dòng)調(diào)用子類(lèi)中的覆蓋版本,而不是父類(lèi)中的被覆蓋函數(shù)版本。
重載(overload):
在同一個(gè)類(lèi)中,出現(xiàn)多個(gè)同名的方法的現(xiàn)象就是Overload重載事發(fā)生在同一個(gè)類(lèi)中,不同方法之間的現(xiàn)象。
在c++或者java中,方法一般為
返回類(lèi)型 方法名(參數(shù)1,參數(shù)2)
判斷2個(gè)方法是不是overload,主要指方法名一樣,參數(shù)不一樣,參數(shù)不一樣指的是參數(shù)的個(gè)數(shù),相同位置的參數(shù)的類(lèi)型是否一樣,而與參數(shù)(型參)的名稱(chēng)無(wú)關(guān)(參數(shù)類(lèi)型/個(gè)數(shù)/順序,不同),與返回類(lèi)型也無(wú)關(guān)。程序會(huì)根據(jù)不同的參數(shù)列來(lái)確定需要調(diào)用的函數(shù)比如c++或者java中,這都是overload ruby中,不存在這樣的overload
多態(tài)(polymorphism)
至于多態(tài),我還沒(méi)有見(jiàn)過(guò)一個(gè)看一眼就能明白的定義。
有的說(shuō)是允許將子類(lèi)類(lèi)型的指針賦值給父類(lèi)類(lèi)型的指針,當(dāng)然java中沒(méi)有指針的概念。
多態(tài)有時(shí)候也被稱(chēng)為動(dòng)態(tài)綁定或者晚綁定或運(yùn)行時(shí)綁定,意思是編譯的時(shí)候不必關(guān)心,運(yùn)行的時(shí)候才決定調(diào)用哪個(gè)對(duì)象的哪個(gè)方法。
我覺(jué)得多態(tài)的用途之一就是在父類(lèi)提供一個(gè)接口(服務(wù)),然后調(diào)用的時(shí)候用的卻是子類(lèi)的具體實(shí)現(xiàn)。
page 49
Ruby前前后后
1.動(dòng)態(tài)語(yǔ)言
編程語(yǔ)言將向動(dòng)態(tài)回歸;
命令式語(yǔ)言和函數(shù)式語(yǔ)言將融合。
Ruby在語(yǔ)法層次實(shí)現(xiàn)了冗余。
Ruby語(yǔ)言的冗余性、缺陷性和動(dòng)態(tài)性正是現(xiàn)實(shí)世界的真實(shí)寫(xiě)照。
page51
2.動(dòng)態(tài)變量類(lèi)型
|
命令式語(yǔ)言 |
將操作數(shù)演化成現(xiàn)在我們熟悉的變量,將操作碼演化成方法(或叫函數(shù)),對(duì)變量執(zhí)行各種操作。 |
|
面向?qū)ο缶幊逃謱⒒咀兞亢头椒ǚ庋b在一起,成為一個(gè)更復(fù)雜的變量——對(duì)象。但是,在一個(gè)類(lèi)中仍然區(qū)分基本變量和方法。 | |
|
函數(shù)式語(yǔ)言 |
一開(kāi)始的函數(shù)式語(yǔ)言不區(qū)分變量和方法,一切都是表(list),表就是能夠不斷分解成單個(gè)元素的數(shù)學(xué)符號(hào)。表可以是變量,可以是方法。 |
|
后來(lái)的有些函數(shù)式語(yǔ)言,吸取了命令式語(yǔ)言的語(yǔ)法,也區(qū)分變量和方法。 |
Ruby: 命令式語(yǔ)言,融合了函數(shù)式語(yǔ)言的語(yǔ)法,變量和方法區(qū)分得不很明顯。
變量名,變量值,變量類(lèi)型,變量的作用域;“變量名,變量值”,必要的。
動(dòng)態(tài)類(lèi)型語(yǔ)言:由編譯內(nèi)核(或解釋內(nèi)核)在運(yùn)行時(shí)刻來(lái)判斷變量類(lèi)型的語(yǔ)言。
弱類(lèi)型語(yǔ)言:弱化了類(lèi)型的概念,變量在運(yùn)行中能夠隨時(shí)代表不同的事物,而不管事物是什么類(lèi)型。
Ruby語(yǔ)言有基本類(lèi)型。
純粹的函數(shù)式語(yǔ)言中沒(méi)有變量作用域的概念。
Ruby中有變量作用域概念,如變量名前綴字符。
實(shí)際應(yīng)用中,有時(shí)會(huì)比較復(fù)雜,在使用閉包時(shí)會(huì)顯現(xiàn)出來(lái)。
Ruby語(yǔ)言中,一切都是對(duì)象,變量不是對(duì)象,變量只是引用某個(gè)對(duì)象的時(shí)候的一個(gè)代號(hào)。
Ruby是動(dòng)態(tài)類(lèi)型語(yǔ)言,不用給任何變量指定數(shù)據(jù)類(lèi)型,解釋器會(huì)在你第一次賦值給變量時(shí),在內(nèi)部將數(shù)據(jù)類(lèi)型記錄下來(lái)。
Ruby語(yǔ)言中,一個(gè)變量被賦予了某個(gè)數(shù)據(jù)類(lèi)型的值,在程序中你可以隨時(shí)再賦予這個(gè)變量其它數(shù)據(jù)類(lèi)型的值。
Ruby 是在運(yùn)行中檢測(cè)語(yǔ)法,只要與語(yǔ)法定義不矛盾,就能通過(guò)。
Ruby 的動(dòng)態(tài)類(lèi)型特點(diǎn)是一把雙刃劍,
死盯住變量的命名。用一些有意義的名字,不必太長(zhǎng),但是應(yīng)該少用單字符,除非是循環(huán)指針變量。在一個(gè)項(xiàng)目組中,程序員是要彼此相互溝通合作的。
3.改變藍(lán)圖——類(lèi)
Ruby是動(dòng)態(tài)語(yǔ)言,你可以改變Ruby程序的結(jié)構(gòu),功能。
在Ruby程序運(yùn)行中,方法、屬性可以被加入或去除,新的類(lèi)或?qū)ο罂梢员唤ⅲ碌哪K可以出現(xiàn)。
除了修改方法,添加方法,還可以除去方法。
Ruby是動(dòng)態(tài)語(yǔ)言:靈活,強(qiáng)大,初學(xué)者容易犯錯(cuò)誤;
4.編碼建議
(1) 命名
|
常量 |
大寫(xiě),下劃線分隔 |
MAX |
|
類(lèi)名/模塊名 |
大寫(xiě)字母開(kāi)頭 |
MyClass |
|
方法名 |
小寫(xiě),下劃線分隔 |
is_prime? |
|
變量/參數(shù)名 |
小寫(xiě)字母開(kāi)頭單詞組合 |
currentValue |
注意:
類(lèi)名、模塊名、變量名、參數(shù)名最好使用“名詞”或者“形容詞+名詞”。
方法名最好使用“動(dòng)詞”或者“動(dòng)詞+名詞”。例如:aStudent.talk。
在Ruby里,有時(shí)將“!”和“?”附于某些方法名后面。驚嘆號(hào)“!”暗示這個(gè)方法具有破壞性,有可能會(huì)改變傳入的參數(shù)。問(wèn)號(hào)“?”表示這個(gè)方法是一個(gè)布爾方法,只會(huì)返回true或false。
(2) 空格
關(guān)鍵字之后要留空格。
逗號(hào)“,”、分號(hào)“;”之后要留空格。
“,”、“;”向前緊跟,緊跟處不留空格。
賦值操作符、比較操作符、算術(shù)操作符、邏輯操作符,如“=”、“+=”“>=”、“<=”、“+”、“*”、“%”、“&&”、“||”等二元操作符的前后應(yīng)當(dāng)加空格。
一元操作符如“!”、“~”等之后不加空格。
象“[]”、“.”、“::”這類(lèi)操作符前后不加空格。
函數(shù)名之后不要留空格,緊跟左圓括號(hào)“(”,以與關(guān)鍵字區(qū)別。左圓括號(hào)“(”向后緊跟,右圓括號(hào)“)”向前緊跟,緊跟處不留空格。
(3) 圓括號(hào)
Ruby中圓括號(hào)常常被省略
優(yōu)先規(guī)則會(huì)自動(dòng)確定哪個(gè)參數(shù)被哪個(gè)方法使用。
建議除了極簡(jiǎn)單的情況,還是使用圓括號(hào)為好。
圓括號(hào)還可以把幾個(gè)語(yǔ)句約束成一個(gè)語(yǔ)句集合。
(4) return
在定義方法的時(shí)候,在最后一行可以顯式地return某個(gè)值或幾個(gè)值,但不是必須的。
Ruby方法的最后一行語(yǔ)句如果是表達(dá)式,表達(dá)式的值會(huì)被自動(dòng)返回;最后一行語(yǔ)句如果不是表達(dá)式,就什么也不返回。
return不僅僅用在方法的最后一行。使用break能夠跳出本層循環(huán),如果要從多重循環(huán)體中跳出,可以使用return,結(jié)束這個(gè)方法;return還能夠從方法的某個(gè)執(zhí)行點(diǎn)立即退出,而不理會(huì)方法的其余代碼。
(5) 注釋
注釋表明了一段代碼塊的功能、意圖或是代碼塊的解釋?zhuān)瑧?yīng)該簡(jiǎn)潔明了,錯(cuò)誤的注釋不如沒(méi)有注釋。一般地,注釋的位置應(yīng)與被描述的代碼相鄰,可以放在代碼的上方或右方,不要放在代碼的下方。
page 61
面向?qū)ο?/B>
1. 重載&重寫(xiě)
多態(tài)性:重寫(xiě)/覆蓋/覆寫(xiě)(override) 重載(overload)
|
重載(overload) |
重寫(xiě)(override) |
|
一個(gè)類(lèi)中,方法名相同、參數(shù)列表不同的幾個(gè)方法,調(diào)用時(shí)根據(jù)不同的參數(shù)調(diào)用不同的方法。方法重載與返回類(lèi)型無(wú)關(guān)。 |
子類(lèi)有一個(gè)方法,方法名、參數(shù)列表、返回類(lèi)型與父類(lèi)的某個(gè)方法完全一致。調(diào)用時(shí)會(huì)調(diào)用子類(lèi)的方法,而屏蔽掉父類(lèi)的同名方法。需要注意的是,子類(lèi)覆寫(xiě)的方法,其可訪問(wèn)性一定要強(qiáng)于或等同于,父類(lèi)被覆寫(xiě)的同名方法。 |
|
重載不僅僅是發(fā)生在子類(lèi)和父類(lèi)之間,大多數(shù)時(shí)候,發(fā)生在同一個(gè)類(lèi)中。 |
覆寫(xiě)發(fā)生在子類(lèi)和父類(lèi)之間,當(dāng)然也可以是子類(lèi)和父類(lèi)的父類(lèi)之間。 |
|
成員函數(shù)被重載的特征:
URL:http://blog.csdn.net/zgbsoap/archive/2005/12/30/566120.aspx |
Ruby語(yǔ)言,只有重寫(xiě),沒(méi)有其它語(yǔ)言具有的嚴(yán)格意義上的重載。
分析:重載,參數(shù)不同,參數(shù)列表對(duì)應(yīng)位置參數(shù)類(lèi)型不同。而ruby支持缺省參數(shù)、可變參數(shù),因此,參數(shù)不同不會(huì)發(fā)生重載。所以,ruby沒(méi)有嚴(yán)格意義上的重載。
父類(lèi)和子類(lèi)中的同名方法,子類(lèi)重寫(xiě)父類(lèi)。子類(lèi)對(duì)象執(zhí)行子類(lèi)中的方法。
在同一個(gè)類(lèi)中寫(xiě)兩個(gè)同名方法,總是執(zhí)行寫(xiě)在后面的方法。
ruby支持缺省參數(shù),和C++相同。
在 Ruby中,我們說(shuō)覆寫(xiě)是指重寫(xiě),我們說(shuō)重載也是指重寫(xiě)。
Ruby是動(dòng)態(tài)語(yǔ)言,可以隨時(shí)改變類(lèi)的屬性、方法,所以覆寫(xiě)和重載的重要性就降低了。
2. 增強(qiáng)父類(lèi)方法
如果我們只是想增強(qiáng)父類(lèi)的方法,而不是完全地替代它,就可以用關(guān)鍵字super指明。
在子類(lèi)定義和父類(lèi)同名的函數(shù)時(shí),加入super關(guān)鍵字。
3. 變量
(1) 穩(wěn)定性
constant :Unchanging in nature, value, or extent; invariable.穩(wěn)定的,不變的。
常變量(常量)。常量名用大寫(xiě)字母開(kāi)頭。
變量:作用域,可以改變值。
Ruby中的常量,可以在類(lèi)和模塊中定義,不能在方法中定義。
如果在外部訪問(wèn)類(lèi)或模塊中的常量,要使用域作用符::。
(2) 作用域
全局變量——作用域程序任何位置,全局變量用$開(kāi)頭。
局部變量——作用域程序某個(gè)單元,用小寫(xiě)字母開(kāi)頭。
全局變量和實(shí)例變量如果沒(méi)有初始化,其默認(rèn)值為 nil 。
Ruby中的局部變量,可以是存在于類(lèi)、方法、模塊、循環(huán)、過(guò)程對(duì)象中。
(3) 共享性
實(shí)例變量——只能被某個(gè)實(shí)例對(duì)象使用的變量,變量名用@開(kāi)頭;
類(lèi)變量——能被某個(gè)類(lèi)的所有實(shí)例對(duì)象共享的變量,變量名用@@開(kāi)頭。
類(lèi)變量在使用前必須要初始化。
(4) 類(lèi)方法
類(lèi)方法——不依賴(lài)于任何特定實(shí)例對(duì)象的方法。
類(lèi)方法與實(shí)例方法的定義方式不同,定義類(lèi)方法要在方法名前加上類(lèi)名和點(diǎn)號(hào)“.”。
調(diào)用一個(gè)類(lèi)方法,與定義類(lèi)方法一樣,要在方法名前加上類(lèi)名和點(diǎn)號(hào)“.”。
類(lèi)方法提供了一個(gè)途徑,在類(lèi)的外部訪問(wèn)類(lèi)變量,無(wú)需通過(guò)類(lèi)的實(shí)例方法。
|
對(duì)象是類(lèi)的實(shí)例,說(shuō)明類(lèi)是對(duì)于對(duì)象的一個(gè)抽象,那么,如果把類(lèi)繼續(xù)抽象,把類(lèi)看做實(shí)例,那它會(huì)是誰(shuí)的實(shí)例? ——元類(lèi)! 元數(shù)據(jù),描述數(shù)據(jù)的數(shù)據(jù)。 |
疑問(wèn):類(lèi)方法可否操作實(shí)例變量,而不僅僅是類(lèi)變量?
4. 單例方法
Ruby如何反映相同的類(lèi),不同實(shí)例,之間的不同的行為特征?
(1)單例方法:在Ruby里,可以給具體的實(shí)例對(duì)象添加實(shí)例方法,這個(gè)方法只屬于這個(gè)實(shí)例對(duì)象,我們把這樣的方法稱(chēng)之為單例方法,單例方法也叫作單件方法。
(2)定義單例方法:
首先要生成一個(gè)實(shí)例對(duì)象,
其次,要在方法名前加上對(duì)象名和一個(gè)點(diǎn)號(hào)“.”。
(3)實(shí)例方法,屬于類(lèi)的每個(gè)實(shí)例對(duì)象。單例方法只出現(xiàn)在單個(gè)實(shí)例對(duì)象中。用單例方法可以極大地豐富多態(tài)性在Ruby中的表現(xiàn)力。
Ruby對(duì)于類(lèi)和對(duì)象的擴(kuò)展,就像數(shù)學(xué)中的多維,原來(lái)只是類(lèi)和對(duì)象兩個(gè)層次,這里,看成任意的層次,只不過(guò),類(lèi)和對(duì)象是其中的兩個(gè)不同的層次。所以,有了類(lèi)的類(lèi)——類(lèi)的進(jìn)一步抽象,有了單例方法,在對(duì)象這個(gè)層面上設(shè)計(jì)方法。
5. 訪問(wèn)控制
在Ruby里,要讀取或是改變對(duì)象的屬性,唯一的途徑是調(diào)用對(duì)象的方法。
控制了對(duì)方法的訪問(wèn),也就控制了對(duì)對(duì)象屬性的訪問(wèn)。
控制對(duì)方法的訪問(wèn),有三種方式:
|
訪問(wèn)控制 |
意義 |
|
public |
可以被任何實(shí)例對(duì)象調(diào)用,不存在訪問(wèn)控制; |
|
protected |
可以被定義它的類(lèi)和其子類(lèi)訪問(wèn), 可以在類(lèi)中或子類(lèi)中指定給實(shí)例對(duì)象; |
|
private |
可以被定義它的類(lèi)和其子類(lèi)訪問(wèn), 不能被實(shí)例對(duì)象調(diào)用。 |
方法默認(rèn)都是公有的(initialize方法除外,它永遠(yuǎn)是私有的)。
|
public方法 |
可以被定義它的類(lèi)和其子類(lèi)訪問(wèn), 可以被類(lèi)和子類(lèi)的實(shí)例對(duì)象調(diào)用; |
|
protected方法 |
可以被定義它的類(lèi)和其子類(lèi)訪問(wèn), 不能被類(lèi)和子類(lèi)的實(shí)例對(duì)象直接調(diào)用, 但是可以在類(lèi)和子類(lèi)中指定給實(shí)例對(duì)象; |
|
private方法 |
可以被定義它的類(lèi)和其子類(lèi)訪問(wèn), 私有方法不能指定對(duì)象。 | 它的類(lèi)和其子類(lèi)訪問(wèn),
Ruby語(yǔ)言的訪問(wèn)控制是動(dòng)態(tài)的,是在程序運(yùn)行時(shí)刻確立的。
你可以根據(jù)自己的需要,在程序的不同位置,改變某個(gè)方法的訪問(wèn)控制級(jí)別,讓你的程序更加富于變化。
page 79
模塊化程序設(shè)計(jì)
1. 模塊
在程序中,相關(guān)的、不相關(guān)的代碼的組合,叫作模塊。一般情況下,我們總是把功能相關(guān)的代碼放在一個(gè)模塊里。
把功能相關(guān)的程序代碼放在一個(gè)模塊里,體現(xiàn)了模塊的第一個(gè)作用:可以被其它程序代碼重復(fù)使用。
Ruby標(biāo)準(zhǔn)包里的 Math 模塊提供了許多方法
|
模塊名.方法名(參數(shù)) |
Math 模塊還提供了兩個(gè)常量,圓周率π 和自然對(duì)數(shù)底 e,
|
模塊名::常量名 |
定義模塊用 module...end 。模塊與類(lèi)非常相似,但是:
A) 模塊不可以有實(shí)例對(duì)象;
B) 模塊不可以有子類(lèi)。
2. 命名空間
模塊的第二個(gè)作用:提供了一個(gè)命名空間(namespace),防止命名沖突。
include 模塊名
定義一個(gè)模塊方法,在方法名前加上模塊名和一個(gè)點(diǎn)號(hào)“.”。
調(diào)用一個(gè)模塊方法,與定義模塊方法一樣,要在方法名前加上模塊名和一個(gè)點(diǎn)號(hào)“.”。模塊方法提供了一個(gè)途徑,在模塊的外部訪問(wèn)模塊內(nèi)部方法,無(wú)須 include模塊。定義模塊常量不需要如此。
3. 糅和(Mix-in)與多重繼承
柔和/混合插入/Mix-in
Ruby是單繼承,通過(guò)Mix-in模塊,實(shí)現(xiàn)多重繼承的優(yōu)點(diǎn)。
模塊的第三個(gè)作用:實(shí)現(xiàn)了類(lèi)似多重繼承的功能。
通過(guò)“<父類(lèi)名”,一個(gè)子類(lèi)可以得到父類(lèi)的屬性和方法;
通過(guò)“include模塊名”,一個(gè)子類(lèi)可以得到某個(gè)模塊的常量和方法。
類(lèi)不能被include。
include方法為一個(gè)類(lèi)的所有對(duì)象包含某個(gè)模塊;
extend方法為一個(gè)類(lèi)的某個(gè)對(duì)象包含某個(gè)模塊(聯(lián)系單例方法)。
4. require和load
require方法包含另一個(gè)文件,另一個(gè)文件名需要是一個(gè)字符串。
load方法與require方法相對(duì)應(yīng),也用來(lái)包含另一個(gè)文件。
require包含文件,只加載一次,遇到同一文件時(shí)自動(dòng)忽略;不同路徑下的同名文件會(huì)多次加載。
load包含文件,加載多次,即使是相同路徑下同一文件。
總結(jié)一下:
|
require,load |
包含文件 |
|
include,extend |
包含模塊 |
|
require |
加載文件一次 |
加載文件時(shí)可以不加后綴名 |
一般情況下用于加載庫(kù)文件 |
|
load |
加載文件多次 |
加載文件時(shí)必須加后綴名 |
用于加載配置文件 |
利用load多次加載文件的特性,可以用來(lái)實(shí)現(xiàn)程序的無(wú)縫升級(jí)和系統(tǒng)的熱部署。程序功能改變了,你只需要重新load一次,其它代碼與它再次交互的時(shí)候,這個(gè)程序?qū)嶋H上已經(jīng)不是原來(lái)的程序了。
page 88
相關(guān)文章
Ruby解析處理YAML和json格式數(shù)據(jù)
這篇文章主要介紹了Ruby對(duì)YAML和json格式的數(shù)據(jù)處理方法,json序列化、json反序列化,json解析等操作,需要的朋友可以參考下2022-04-04
Ruby簡(jiǎn)明教程之循環(huán)語(yǔ)句介紹
這篇文章主要介紹了Ruby簡(jiǎn)明教程之循環(huán)語(yǔ)句介紹,非常簡(jiǎn)潔的講解,可以作為語(yǔ)法備忘,需要的朋友可以參考下2014-06-06
Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例
這篇文章主要介紹了Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例,建造者模式將一個(gè)復(fù)雜對(duì)象的構(gòu)造與它的表示分離,使同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示,需要的朋友可以參考下2016-03-03
Ruby實(shí)現(xiàn)發(fā)送郵件的兩個(gè)方法
這篇文章主要介紹了Ruby實(shí)現(xiàn)發(fā)送郵件的兩個(gè)方法,本文講解了使用Net::SMTP、使用ruby gem:mail兩種方法實(shí)現(xiàn)郵件發(fā)送,需要的朋友可以參考下2015-01-01
Ruby中Hash哈希結(jié)構(gòu)的基本操作方法小結(jié)
Hash是一種鍵值對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu),Ruby中直接帶有Hash類(lèi)來(lái)對(duì)其提供支持,這里我們整理了Ruby中Hash哈希結(jié)構(gòu)的基本操作方法小結(jié),首先來(lái)回顧一下Hash的基本知識(shí):2016-06-06

