2013-02-04 38 views
0

如果一個名爲新功能使類Foo和定義一個名爲initialize一個叫new功能功能會發生什麼?紅寶石如果我定義了一類

後來,如果我的代碼foo = Foo.new,其功能將運行?由於initialize函數在聲明new時應該被調用。

編輯:

澄清:

class Foo 
    def new 
    end 
end 

這是那種我在談論的事情。

回答

4

如果您在類上定義了new,它會調用您的函數並覆蓋將創建該類的新實例的典型new方法。這是,如果你不重寫要好,但你仍然可以做到這一點逃脫它在Ruby中,因爲Ruby的好的那樣。

如果你仍然想後,該類的一個新實例,你可以調用Foo.allocate來獲取。然後你可以手動調用initialize來觸發任何初始化事件。

2

的手動定義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指出。