ruby 對象的初始化 方法

來源:互聯網
上載者:User

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

initalize方法

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

ruby> class Fruit
| def initialize
| @kind = "apple"
| @condition = "ripe"
| end
| end
nil
ruby> f4 = Fruit.new
"a ripe apple"

將預設的變為需要的

很多時候,預設值不會有太多的意思.真的是預設那樣的水果嗎?也許在創造水果的時候對其類型作要求是個更好的辦法.要這樣做,我們就必須給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
| 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"

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

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.