ruby 物件的初始化 方法

2021-07-02 04:21:01 字數 1412 閱讀 2928

前面一節的 fruit 類有兩個實變數,分別表述水果的型別和狀態.直到為這個類寫了乙個定製的inspect方法,我們方才了解它不會對乙個缺乏屬性的水果做出合理的解釋.幸運的是,ruby提供了一種允許實變數總是被初始化的方法.

initalize方法

當ruby建立乙個新物件時,它總是會尋找乙個名為 initialize 的方法並執行它.因此,我們可以簡單通過乙個initialize方法向實變數中加入預設值,這樣一來, inspect方法就有東西可說了.

ruby> class fruit

| def initialize

| @condition = "ripe"

| end

| end

nil

ruby> f4 = fruit.new

將預設的變為需要的

很多時候,預設值不會有太多的意思.真的是預設那樣的水果嗎?也許在創造水果的時候對其型別作要求是個更好的辦法.要這樣做,我們就必須給initialize 方法加入乙個正式的引數.因為一些不會在此提及的原因,你向 new 傳遞的引數實際上是遞給了initialize.

ruby> class fruit

| def initialize( k )

| @kind = k

| @condition = "ripe"

| end

| end

nil

ruby> f5 = fruit.new "mango"

"a ripe mango"

ruby> f6 = fruit.new

err: (eval):1:in `initialize': wrong # of arguments(0 for 1)

彈性的初始化

上面我們看到一旦乙個引數被關聯到乙個 initialize 方法上,就無法在避免錯誤產生的情況下將其省掉.如果希望考慮周全,我們可以在給了引數的情況下使用它,否則使用預設值.

ruby> class fruit

| @kind = k

| @condition = "ripe"

| end

| end

nil

ruby> f5 = fruit.new "mango"

"a ripe mango"

ruby> f6 = fruit.new

可以在任何方法內使用預設引數,而不僅僅是initialize.參數列(argument list)必須以有預設值的引數結尾.

有時,提供多種初始化物件方法是有益的.雖然已超出本教程的範圍,但ruby提供了物件映象(object reflection)和可變長度的參數列(variable-length argument lists),這些都有效地促進了方法過載.

如果本站有幫助到您,請不吝於給乙個贊鼓勵!

stl物件的初始化方法

stl物件有幾種初始化方法 1 定義乙個空的物件,如 vectorvec 2 指定物件的大小,如 vectorvec 10 3 指定初值,如 vectorvec 10,1 含有是個元素,每個值為1 4 以乙個陣列初始化,如 void print int privale int main array ...

Ruby 中變數的初始化

ruby中的變數分為四類,分別是 類變數 例項變數 全域性變數和區域性變數 類變數 在使用類變數之前必須對其進行初始化賦值。否則引用乙個未初始化的類變數會得到乙個錯誤。例項變數 如果引用乙個未初始化的例項變數ruby直譯器會返回乙個nil 全域性變數 引用未初始化的全域性變數,同樣會返回nil 區域...

物件初始化

在oc中使用alloc後,會分配到一塊記憶體塊,同時這塊記憶體塊會被清零,所以初始化函式init是不需要再做置零的操作的。在oc中,應該在alloc後就呼叫初始化函式init,使用new可以達到這個效果,但new不是oc的風格。物件在init時,應該先使用其父類的init,然後再使用自己的init行...