2011-05-18 72 views
37

在Ruby中,將代碼放在initialize()方法中而不是直接放在類體中有什麼區別?當撥打MyClass.new時,兩者似乎都會被執行。Ruby:initialize()vs class body?

很明顯,initialize()可以接受參數,但那是唯一的區別嗎?

class MyClass 
    puts 'Hello' 

    def initialize(params) 
    puts 'World' 
    end 
end 

回答

60

嘗試創建的MyClass的

a = MyClass.new 
b = MyClass.new 

兩個實例看出區別:

你好

世界

世界

類體中的代碼只執行一次 - 當ruby加載文件時。每次創建類的新實例時,initialize()都會執行。

+3

另外,在_initialize_中有對象實例可以使用。 – tokland 2011-05-18 12:11:05

3

如果您在類體中編寫代碼,它將在ruby加載該類時執行,加載只能發生一次。只有當你創建一個類的實例時,纔會執行初始化,並且每次調用新的類時都會執行初始化。

現在,當你做MyClass.new紅寶石加載MyClass類將查找類內存,如果它不然後加載的類,然後調用其新的方法來創建instanc

8

好,initialize得到由new稱爲,而類體在類定義/加載時被評估。

此外,請嘗試在課程正文或initialize中設置實例變量。你會注意到後者將屬於創建的對象,而第一個屬於類實例(因此是名稱類實例變量)。