Benannte Parameter in Ruby 2
Ich verstehe nicht ganz, wie benannte Parameter in Ruby 2.0 ist in Arbeit.
def test(var1, var2, var3)
puts "#{var1} #{var2} #{var3}"
end
test(var3:"var3-new", var1: 1111, var2: 2222) #wrong number of arguments (1 for 3) (ArgumentError)
behandelt wie ein hash. Und es ist sehr lustig, weil Sie benannte Parameter in Ruby 2.0 I muss festlegen von Standardwerten für Sie:
def test(var1: "var1", var2: "var2", var3: "var3")
puts "#{var1} #{var2} #{var3}"
end
test(var3:"var3-new", var1: 1111, var2: 2222) # ok => 1111 2222 var3-new
die sehr ähnlich zu dem Verhalten, das Ruby hatte vor mit Standard-Parametern-Werte:
def test(var1="var1", var2="var2", var3="var3")
puts "#{var1} #{var2} #{var3}"
end
test(var3:"var3-new", var1: 1111, var2: 2222) # ok but ... {:var3=>"var3-new", :var1=>1111, :var2=>2222} var2 var3
Weiß ich, warum passiert das und fast, wie es funktioniert.
Aber ich bin einfach nur neugierig, muss ich benutze Standardwerte für Parameter, falls ich benannte Parameter zu verwenden?
Und, kann mir jemand sagen, was der Unterschied zwischen diesen beiden dann?
def test1(var1="default value123")
#.......
end
def test1(var1:"default value123")
#.......
end
InformationsquelleAutor der Frage Alan Coromano | 2013-03-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstens, das Letzte Beispiel, das du gepostet hast, ist irreführend. Ich bin völlig einverstanden, dass das Verhalten ist ähnlich wie die zuvor. Das Letzte Beispiel übergibt das argument hash als ersten optionalen parameter, ist eine andere Sache!
Wenn Sie nicht wollen, um einen Standardwert haben, können Sie einfach
nil
.Wenn Sie möchten, Lesen Sie ein gutes Dokument, siehe "Ruby 2-Schlüsselwort-Argumente".
InformationsquelleAutor der Antwort phoet
Ich denke, dass die Antwort auf Ihre aktualisierte Frage kann erklärt werden mit expliziten Beispiele. Im Beispiel unten müssen Sie die optionalen Parameter in einer expliziten Reihenfolge:
Den benannten parameter Ansatz ist anders. Es ermöglicht Ihnen die Bereitstellung von Vorgaben, sondern ermöglicht es dem Anrufer, um festzustellen, welche, wenn überhaupt, die Parameter zu bieten:
Während es stimmt, dass die beiden Ansätze sind ähnlich, wenn Sie über keine Parameter, Sie unterscheiden sich, wenn der Benutzer Parameter an die Methode. Mit benannten Parametern der Anrufer kann angeben, welche parameter zur Verfügung gestellt werden. Speziell das Letzte Beispiel (die nur die Adresse) ist nicht ganz erreichbar im ersten Beispiel; Sie können ähnliche Ergebnisse NUR durch Angabe BEIDER Parameter an die Methode. Dies macht die named-Parameter-Ansatz viel flexibler ist.
InformationsquelleAutor der Antwort AndyV
Ich Stimme Ihnen zu, dass es seltsam zu verlangen, default-Werte, da der Preis für benannte Parameter verwenden, und offensichtlich wird der Ruby-Betreuer mit uns vereinbaren! Ruby 2.1 drop default-Wert-Anforderung wie der 2.1.0-preview1.
InformationsquelleAutor der Antwort Josh Diehl
Als der Ruby 2.1.0die Sie nicht mehr haben, um die Standardwerte für benannte Parameter. Lassen Sie den Standardwert für einen parameter, der Anrufer wird gebeten.
Gegeben:
Werde Sie auf die gleiche Weise Verhalten, wenn Sie nicht bestanden argument:
Aber Sie Verhalten sich sehr viel anders, wenn ein argument übergeben wird:
InformationsquelleAutor der Antwort trliner
Dies ist in allen anderen Antworten, aber ich möchte mit diesem Extrakt-Essenz.
Gibt es vier Arten parameter:
Wenn Sie eine Funktion definieren, positionale Argumente angegeben sind, bevor Sie Schlüsselwort-Argumente, und Argumente erforderlich, bevor die optionalen.
edit: die benötigten keyword-argument ohne default-Wert) ist neuer als von Ruby 2.1.0, wie von anderen erwähnt.
InformationsquelleAutor der Antwort Chris Cox
Können Sie festlegen, der Standardwert und die Namen der parameter und rufen Sie dann die Methode, die Art und Weise Sie es nennen würde, wenn Sie hatte eine hash-basierte "benannte" Parameter, aber ohne die Notwendigkeit zu definieren, die standardmäßig in Ihrer Methode.
Müssten Sie dies in der Methode, für jede "benannte parameter", wenn Sie wurden mit einem hash.
in:
InformationsquelleAutor der Antwort aaandre
Laut "Ruby 2.0.0 von Beispiel" müssen Sie die Standardwerte:
InformationsquelleAutor der Antwort Michael Fürstenberg
Können Sie festlegen, benannte Parameter wie
Wenn Sie don ' T-pass-einer der Parameter, dann Ruby wird sich über eine
undefined local variable or method
.InformationsquelleAutor der Antwort Clemens Helm