Für Python-Leute:
Der _*
Operator von Scala entspricht mehr oder weniger dem * -Operator von Python .
Beispiel
Die Umwandlung des scala Beispiel aus dem Link bereitgestellt durch Luigi Plinge :
def echo(args: String*) =
for (arg <- args) println(arg)
val arr = Array("What's", "up", "doc?")
echo(arr: _*)
zu Python würde aussehen wie:
def echo(*args):
for arg in args:
print "%s" % arg
arr = ["What's", "up", "doc?"]
echo(*arr)
und beide geben die folgende Ausgabe:
Was ist
los
,
Doc?
Der Unterschied: Positionsparameter auspacken
Der Python- *
Operator kann sich auch mit dem Auspacken von Positionsparametern / Parametern für Funktionen mit fester Arität befassen:
def multiply (x, y):
return x * y
operands = (2, 4)
multiply(*operands)
8
Dasselbe mit Scala machen:
def multiply(x:Int, y:Int) = {
x * y;
}
val operands = (2, 4)
multiply (operands : _*)
wird versagen:
Nicht genügend Argumente für die Methodenmultiplikation: (x: Int, y: Int) Int.
Nicht spezifizierter Wertparameter y.
Aber mit scala ist es möglich, dasselbe zu erreichen:
def multiply(x:Int, y:Int) = {
x*y;
}
val operands = (2, 4)
multiply _ tupled operands
Laut Lorrin Nelson funktioniert das so:
Der erste Teil, f _, ist die Syntax für eine teilweise angewendete Funktion, in der keines der Argumente angegeben wurde. Dies funktioniert als Mechanismus, um das Funktionsobjekt zu erfassen. tupled gibt eine neue Funktion von arity-1 zurück, die ein einzelnes arity-n-Tupel akzeptiert.
Weitere Lesung:
def sum(xs: _*)
wirft 'Fehler: ungebundener Platzhaltertyp'