如果一個名爲新功能使類Foo
和定義一個名爲initialize
和一個叫new
功能功能會發生什麼?紅寶石如果我定義了一類
後來,如果我的代碼foo = Foo.new
,其功能將運行?由於initialize
函數在聲明new
時應該被調用。
編輯:
澄清:
class Foo
def new
end
end
這是那種我在談論的事情。
如果一個名爲新功能使類Foo
和定義一個名爲initialize
和一個叫new
功能功能會發生什麼?紅寶石如果我定義了一類
後來,如果我的代碼foo = Foo.new
,其功能將運行?由於initialize
函數在聲明new
時應該被調用。
編輯:
澄清:
class Foo
def new
end
end
這是那種我在談論的事情。
如果您在類上定義了new
,它會調用您的函數並覆蓋將創建該類的新實例的典型new
方法。這是,如果你不重寫要好,但你仍然可以做到這一點和逃脫它在Ruby中,因爲Ruby的好的那樣。
如果你仍然想後,該類的一個新實例,你可以調用Foo.allocate
來獲取。然後你可以手動調用initialize
來觸發任何初始化事件。
的手動定義new
功能做Foo.new
時將不會被調用,因爲手動定義new
功能將是一個實例功能。 Foo.new
正在調用類函數。
class Foo
def new
puts 'new!'
123
end
def initialize
puts 'initialize'
end
end
c = Foo.new
puts c #this will print "#<Confusion:0xb75b20f4>"
c.new #this will print "new!"
編輯:
但是,如果我這樣做:
class Foo
def Foo.new
end
end
那麼我們會遇到的問題@Ryan指出。