2009-11-07 10 views
6

ich verwendet, um diesesinitialisieren in Ruby

public constructor_name() { 
    this(param) 
} 

public constructor_name(int param) { 
    this.param = param 
} 

in Java zu haben, und was Rubin haben wir diese Art von Selbst Referenz Konstruktor?

Antwort

9

Das sind keine gültigen Java, aber ich denke, Sie erhalten ein optionales Argument. In diesem Fall könnten Sie entweder geben nur das Argument einen Standardwert

def initialize(param=9999) 
... 
end 

oder Sie können eine Splat Argument:

def initialize(*params) 
    param = params.pop || 9999 
end 
+0

auch könnten Sie "Hash-Namen Argumente" dazu verwenden, nehme ich an ... – rogerdpack

12

Da Rubin eine dynamische Sprache ist, können Sie nicht mehrere Konstrukteure haben (oder konstruieren Sie die Verkettung für diese Angelegenheit). Zum Beispiel im folgenden Code:

class A 
    def initialize(one) 
    puts "constructor called with one argument" 
    end 
    def initialize(one,two) 
    puts "constructor called with two arguments" 
    end 
end 

Sie würden 2 Konstruktoren mit unterschiedlichen Parametern erwarten. Die letzte Auswertung wird jedoch der Konstruktor der Klasse sein. In diesem Fall initialize(one,two).

+6

Warum würden Sie argumentieren, dass die Tatsache, dass Sie nicht mehrere Konstruktoren haben können, Ruby als eine dynamische Sprache verwandt ist? Soweit ich das sehen kann, ist dies eine Designentscheidung, die nichts mit der Frage zu tun hat, ob die Sprache dynamisch ist oder nicht. – Cumbayah

+1

@Cumbayah Sorry für die Wiederbelebung, aber für zukünftige Leser: der Autor könnte gemeint haben, dass Ruby (in einigen Aspekten) so ausgeführt wird, als ob es in einer interaktiven Sitzung wäre, also ersetzt das Definieren einer Funktion zweimal die ältere. – Kroltan

Verwandte Themen