在Ruby中,將代碼放在initialize()
方法中而不是直接放在類體中有什麼區別?當撥打MyClass.new
時,兩者似乎都會被執行。Ruby:initialize()vs class body?
很明顯,initialize()
可以接受參數,但那是唯一的區別嗎?
class MyClass
puts 'Hello'
def initialize(params)
puts 'World'
end
end
在Ruby中,將代碼放在initialize()
方法中而不是直接放在類體中有什麼區別?當撥打MyClass.new
時,兩者似乎都會被執行。Ruby:initialize()vs class body?
很明顯,initialize()
可以接受參數,但那是唯一的區別嗎?
class MyClass
puts 'Hello'
def initialize(params)
puts 'World'
end
end
嘗試創建的MyClass的
a = MyClass.new
b = MyClass.new
兩個實例看出區別:
你好
世界
世界
類體中的代碼只執行一次 - 當ruby加載文件時。每次創建類的新實例時,initialize()都會執行。
如果您在類體中編寫代碼,它將在ruby加載該類時執行,加載只能發生一次。只有當你創建一個類的實例時,纔會執行初始化,並且每次調用新的類時都會執行初始化。
現在,當你做MyClass.new紅寶石加載MyClass類將查找類內存,如果它不然後加載的類,然後調用其新的方法來創建instanc
好,initialize
得到由new
稱爲,而類體在類定義/加載時被評估。
此外,請嘗試在課程正文或initialize
中設置實例變量。你會注意到後者將屬於創建的對象,而第一個屬於類實例(因此是名稱類實例變量)。
另外,在_initialize_中有對象實例可以使用。 – tokland 2011-05-18 12:11:05