In Python haben wir den Stern (oder "*" oder "entpacken") -Operator, der es uns erlaubt, eine Liste zu entpacken, um bequem Positionsargumente zu übergeben. Zum Beispiel:Gibt es ein Scala-Äquivalent des Python-Listen-Entpackers (a.k.a.. "*")?
range(3, 6)
args = [3, 6]
# invokes range(3, 6)
range(*args)
In diesem speziellen Beispiel ist es nicht viel Tipparbeit sparen, da range
nur zwei Argumente übernimmt. Aber Sie können sich vorstellen, dass, wenn es mehr Argumente zu range
gäbe, oder wenn args
von einer Eingabequelle gelesen wurde, von einer anderen Funktion, etc. zurückgegeben wurde, dann könnte dies nützlich sein.
In Scala konnte ich kein Äquivalent finden. Betrachten Sie die folgenden Befehle in einer Scala interaktiven Sitzung ausführen:
case class ThreeValues(one: String, two: String, three: String)
//works fine
val x = ThreeValues("1","2","3")
val argList = List("one","two","three")
//also works
val y = ThreeValues(argList(0), argList(1), argList(2))
//doesn't work, obviously
val z = ThreeValues(*argList)
Gibt es eine prägnante Art und Weise dies in val y
verwendet neben dem Verfahren zu tun?
Wird fälschlicherweise als Duplikat markiert, während dies nicht der Fall ist. Scala hat ': _ * 'Operation, aber es funktioniert nur mit Varargs auf der Definitionsseite: z. 'case class Things (xs: String *)' –