2013-03-22 45 views
5

有沒有辦法在ruby中有多個「初始化」方法? 例如:一個方法除了一個參數,而另一個除了三個?在紅寶石中有多個構造函數

喜歡的東西

class One 
    def initialize (a) 
    puts a 
    end 
    def initialize_1 (a,b) 
    puts a ,b 
    end 
end 
+2

我同意ramblex。也相關 - http://stackoverflow.com/questions/9373104/why-does-ruby-not-support-method-overloading。如果您正在嘗試解決某個特定問題,則可以嘗試發佈更具體的問題,因爲可能有不同的解決方法。 – 2013-03-22 15:06:41

+0

謝謝,我沒有具體的問題,我只是想弄清楚語言的來龍去脈。 我知道答案是否定的,但即時通訊仍不確定你是如何解決這個問題的。 – 13driver 2013-03-22 15:11:50

+0

你可以用'konstructor' gem https://github.com/snovity/konstructor實現效果,例如你只需要聲明'konstructor:initialize_1' – snovity 2017-01-26 07:26:17

回答

5

initialize其實並不是一個構造函數。你確實可以有兩個構造函數。

class One 
    singletonclass.class_eval{alias old_new :new} 
    def self.new a 
    puts a 
    old_new 
    end 
    def self.new_1 a, b 
    puts a, b 
    old_new 
    end 
end 
+0

這會給你買什麼?一切仍然通過原始新的和初始化的渠道。不妨說一句「def self.new_1(a,b);新的(A,B);結束'沒有複雜的別名goo。使用不同名稱的替代構造函數通常會將其參數重新打包爲基本新的一般形式。 – dbenhur 2013-03-22 16:05:56

+0

我們又見面了,難道你不是那種給我如此「可愛」的可愛解釋嗎? 無論如何,只要我發送多於一個參數,它仍然會抱怨'錯誤的參數數'。 也im不知道這是什麼讓我... – 13driver 2013-03-22 17:09:32