實(shí)例化和初始化方法

01

的02

實(shí)例化和初始化方法

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

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

02

43 of 02 44

制作實(shí)例

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

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

初始化實(shí)例

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

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

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

脫色對(duì)象

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

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

制作對(duì)象的副本

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

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

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