ruby 對象的初始化 方法
更新時間:2007年11月24日 14:23:58 作者:
前面一節(jié)的 Fruit 類有兩個實變量,分別表述水果的類型和狀態(tài).直到為這個類寫了一個定制的inspect方法,我們方才了解它不會對一個缺乏屬性的水果做出合理的解釋.幸運的是,Ruby提供了一種允許實變量總是被初始化的方法.
initalize方法
當Ruby創(chuàng)建一個新對象時,它總是會尋找一個名為 initialize 的方法并執(zhí)行它.因此,我們可以簡單通過一個initialize方法向?qū)嵶兞恐屑尤肴笔≈?這樣一來, inspect方法就有東西可說了.
ruby> class Fruit
| def initialize
| @kind = "apple"
| @condition = "ripe"
| end
| end
nil
ruby> f4 = Fruit.new
"a ripe apple"
將缺省的變?yōu)樾枰?
很多時候,缺省值不會有太多的意思.真的是缺省那樣的水果嗎?也許在創(chuàng)造水果的時候?qū)ζ漕愋妥饕笫莻€更好的辦法.要這樣做,我們就必須給initialize 方法加入一個正式的參數(shù).因為一些不會在此提及的原因,你向 new 傳遞的參數(shù)實際上是遞給了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)
彈性的初始化
上面我們看到一旦一個參數(shù)被關聯(lián)到一個 initialize 方法上,就無法在避免錯誤產(chǎn)生的情況下將其省掉.如果希望考慮周全,我們可以在給了參數(shù)的情況下使用它,否則使用缺省值.
ruby> class Fruit
| def initialize( k="apple" )
| @kind = k
| @condition = "ripe"
| end
| end
nil
ruby> f5 = Fruit.new "mango"
"a ripe mango"
ruby> f6 = Fruit.new
"a ripe apple"
可以在任何方法內(nèi)使用缺省參數(shù),而不僅僅是initialize.參數(shù)表(argument list)必須以有缺省值的參數(shù)結尾.
有時,提供多種初始化對象方法是有益的.雖然已超出本教程的范圍,但Ruby提供了對象映象(object reflection)和可變長度的參數(shù)表(variable-length argument lists),這些都有效地促進了方法重載.
initalize方法
當Ruby創(chuàng)建一個新對象時,它總是會尋找一個名為 initialize 的方法并執(zhí)行它.因此,我們可以簡單通過一個initialize方法向?qū)嵶兞恐屑尤肴笔≈?這樣一來, inspect方法就有東西可說了.
ruby> class Fruit
| def initialize
| @kind = "apple"
| @condition = "ripe"
| end
| end
nil
ruby> f4 = Fruit.new
"a ripe apple"
將缺省的變?yōu)樾枰?
很多時候,缺省值不會有太多的意思.真的是缺省那樣的水果嗎?也許在創(chuàng)造水果的時候?qū)ζ漕愋妥饕笫莻€更好的辦法.要這樣做,我們就必須給initialize 方法加入一個正式的參數(shù).因為一些不會在此提及的原因,你向 new 傳遞的參數(shù)實際上是遞給了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)
彈性的初始化
上面我們看到一旦一個參數(shù)被關聯(lián)到一個 initialize 方法上,就無法在避免錯誤產(chǎn)生的情況下將其省掉.如果希望考慮周全,我們可以在給了參數(shù)的情況下使用它,否則使用缺省值.
ruby> class Fruit
| def initialize( k="apple" )
| @kind = k
| @condition = "ripe"
| end
| end
nil
ruby> f5 = Fruit.new "mango"
"a ripe mango"
ruby> f6 = Fruit.new
"a ripe apple"
可以在任何方法內(nèi)使用缺省參數(shù),而不僅僅是initialize.參數(shù)表(argument list)必須以有缺省值的參數(shù)結尾.
有時,提供多種初始化對象方法是有益的.雖然已超出本教程的范圍,但Ruby提供了對象映象(object reflection)和可變長度的參數(shù)表(variable-length argument lists),這些都有效地促進了方法重載.
相關文章
Ruby中使用mechanize批量下載校內(nèi)網(wǎng)相冊照片
這篇文章主要介紹了Ruby中使用mechanize批量下載校內(nèi)網(wǎng)相冊照片,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下2015-01-01Ruby 之 class 中的 private、 protected、public
Ruby 之 class 中的 private、 protected、public2009-11-11