實例化和初始化方法

01

的02

實例化和初始化方法

在軌道上學(xué)習(xí)紅寶石:與irb一起玩

當(dāng)您在Ruby中定義一個類時,Ruby將為類名稱常量分配一個新的類對象。例如,如果你要說班級人員;結(jié)束,這大致相當(dāng)于人員=類。新納米科普。該類對象的類型為,并包含許多方法,可用于制作這些實例的副本實例。

02

43 of 02 44

制作實例

要創(chuàng)建一個類的新實例,請調(diào)用該類'snew方法。默認(rèn)情況下,這將為類分配所需的內(nèi)存并返回對新對象的引用。所以,如果你要創(chuàng)建一個54人55班的新實例,你會打電話給56人人。新。

起初這似乎有點落后,Ruby中沒有new關(guān)鍵字或任何特殊語法。新對象是通過一種正常的方法創(chuàng)建的,所有這些方法都是說和做的,做相對簡單的事情。

初始化實例

空白對象不是很令人興奮。為了開始使用對象,必須首先初始化(假設(shè)它有任何需要初始化的實例變量)。這是通過初始化方法完成的。Ruby會通過你傳遞給70的任何論據(jù)SomeClass.new到在新對象上初始化。然后,您可以使用正常的變量分配和方法來初始化對象的狀態(tài)。在此示例中,將顯示一個類,其初始化方法將采用名稱和年齡參數(shù),并將其分配給實例變量。

班級人員定義初始化(姓名,年齡)@name,@age=name,年齡結(jié)束bob=人。新('Bob',34)

您也可以利用這個機會獲取您可能需要的任何資源。打開網(wǎng)絡(luò)插座,打開文件,讀取您需要的任何數(shù)據(jù)等。**需要注意的是人們通常不會'預(yù)計初始化方法會失敗。請務(wù)必**記錄任何可能失敗的初始化方法。

脫色對象

一般來說,你不破壞紅寶石中的對象。如果您'來自C++或其他沒有垃圾收集器的語言,這似乎很奇怪。但是在Ruby(以及大多數(shù)其他垃圾收集的語言)中,您不需要'不破壞對象,只需停止引用它。在下一個垃圾收集循環(huán)中,任何沒有提及它的對象都將自動銷毀。有一些帶有圓形引用的錯誤,但一般來說,這工作完美無誤,你不需要'甚至不需要"destructor。"

如果您'想知道資源,請不要擔(dān)心。當(dāng)保存資源的對象被銷毀時,資源將被釋放。打開的文件和網(wǎng)絡(luò)連接將被關(guān)閉,內(nèi)存取消分配等。只有在C擴展名中分配任何資源時,您真的需要擔(dān)心取消分配資源。雖然不能保證垃圾收集器何時運行。為了以及時的方式取消分配資源,請嘗試手動釋放資源。

制作對象的副本

紅寶石是通過參考。如果將對對象的引用傳遞給方法,并且該方法調(diào)用修改該對象狀態(tài)的方法,則可能發(fā)生意外后果。此外,方法可以稍后保存對對象的引用以進行修改,從而導(dǎo)致錯誤的延遲效果。為了避免這種情況,Ruby提供了一些復(fù)制對象的方法。

要復(fù)制任何對象,只需調(diào)用一些_對象方法。一個新的對象將被分配,所有的object's實例變量將被復(fù)制。然而,復(fù)制實例變量是這應(yīng)該避免的:這就是's稱為"淺拷貝。"如果要將文件保存在實例變量中,兩個重復(fù)的對象現(xiàn)在將指的是相同的文件。

在使用dup方法之前,請注意副本是淺副本。有關(guān)更多信息,請參閱用Ruby制作深度副本的文章。