Wie man ein Tupelargument am besten weitergibt?
Wie übergibt man ein Tupel argument der beste Weg ?
Beispiel:
def foo(...): (Int, Int) = ...
def bar(a: Int, b: Int) = ...
Nun möchte ich übergeben Sie die Ausgabe des foo
zu bar
. Dies kann erreicht werden mit:
val fooResult = foo(...)
bar(fooResult._1, fooResult._2)
Dieser Ansatz sieht ein bisschen hässlich, vor allem, wenn wir uns mit einem n
-Tupel mit n > 2
. Auch wir haben zum speichern des Ergebnisses von " foo " in einen extra Wert, denn sonst foo
hat mehr als einmal ausgeführt werden mit bar(foo._1, foo._2)
.
Gibt es einen besseren Weg, um pass durch das Tupel als argument ?
Kommentar zu dem Problem
mögliche Duplikate von Wie wendet man eine Funktion auf einem Tupel?
InformationsquelleAutor der Frage John Threepwood | 2012-09-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine spezielle
tupled
Methode zur Verfügung, die für jede Funktion:bar2
nimmt ein Tupel von(Int, Int)
(gleiche wiebar
Argumente). Jetzt können Sie sagen:Wenn Ihre Methoden waren eigentlich Funktionen (beachten Sie die
val
Schlüsselwort) syntax ist viel angenehmer:Siehe auch
InformationsquelleAutor der Antwort Tomasz Nurkiewicz
Mit
tupled
wie @Tomasz erwähnt, ist ein guter Ansatz.Könnte man auch extrahieren der Tupel zurückgegeben, die von
foo
bei der Belegung:Dies hat den Vorteil, sauberer code (keine
_1
und_2
), und ermöglicht die Zuweisung aussagekräftiger Namen fürx
undy
, wodurch der code leichter zu Lesen.InformationsquelleAutor der Antwort dhg
Lohnt es sich, auch das wissen über die
als eine alternative, die nicht erforderlich ist, Sie explizit erstellen Sie eine temporäre
fooResult
. Es ist ein guter Kompromiss, wenn Geschwindigkeit und das fehlen von Unordnung sind beide wichtig. Sie können eine Funktion erstellen, mitbar _
und dann konvertieren Sie Sie, um ein einziges Tupel argument mit.tupled
, aber das schafft ein zwei neue Funktions-Objekte, die jedes mal, wenn Sie rufen Sie die pair-Mädchen; Sie können das Ergebnis speichern, aber das könnte Krempel dein code unnötig.Für den täglichen Gebrauch (d.h. dies ist nicht die performance-Begrenzung Teil des Codes), können Sie nur
in der Linie. Sicher, erstellen Sie zwei zusätzliche Funktion, die Objekte, aber Sie wahrscheinlich nur erstellt das Tupel auch, so dass Sie don ' T care , dass viel, richtig?
InformationsquelleAutor der Antwort Rex Kerr