初始化方法是Ruby中的內置方法嗎?初始化方法是Ruby中的一種內置方法嗎?
爲什麼當我們創建一個新的對象時,我們必須傳遞參數,以及爲什麼它直接傳遞給初始化方法?而且,我們可以創建一個沒有初始化方法的類嗎?
初始化方法是Ruby中的內置方法嗎?初始化方法是Ruby中的一種內置方法嗎?
爲什麼當我們創建一個新的對象時,我們必須傳遞參數,以及爲什麼它直接傳遞給初始化方法?而且,我們可以創建一個沒有初始化方法的類嗎?
可以考慮Class#new
方法和每個類的#initialize
方法之間的關係,以實現或多或少是這樣的:
class Class
def new
instance = allocate()
instance.initialize
return instance
end
end
class Foo
def initialize
# Do nothing
end
end
您可以創建一個沒有明確定義#initialize
方法的類,因爲#initialize
方法被默認定義爲什麼都不做,並且它的返回值總是被忽略(不管你返回什麼值)。
您傳遞給Class#new
的參數總是以相同的順序和格式直接傳遞到#initialize
。例如:
class Class
def new (arg1, arg2, &block_arg)
instance = allocate()
instance.initialize(arg1, arg2, &block_arg)
return instance
end
end
class MyClass
def initialize (arg1, arg2, &block_arg)
# Do something with args
end
end
創建新對象的邏輯由兩個元素組成。首先,你需要在內存中創建一個新對象。這是通過在給定的類上調用allocate
方法完成的(它在Class類中定義) - 它不需要參數,它唯一的責任是從ruby內存堆棧板獲得一個空閒槽,將一個新對象放在該點中並返回目的。第二步是在這個新創建的對象上調用initialize
方法 - 這就是爲什麼initialize
是實例方法而不是類方法。
默認的initialize
方法是該語言的一部分,它從字面上什麼都不做,並且不帶參數。
new
方法僅僅是一個方便的簡寫,其首先調用allocate
方法,然後調用由allocate
方法返回的對象上的initialize
方法(與所有的傳遞PARAMS)。
'initialize':你的意思是什麼?它是[構造函數[(http://en.wikipedia.org/wiki/Constructor_(object-oriented_programming)):用於創建類的實例。 將參數傳遞給'initialize'不是必須的。 **我們可以創建一個沒有初始化方法的類**:是 –