Para la gente de Python:
operador de Scala _*
es más o menos el equivalente de Python de *-operator.
Ejemplo
la conversión el ejemplo Scala de la link proporcionada por Luigi Plinge:
def echo(args: String*) =
for (arg <- args) println(arg)
val arr = Array("What's", "up", "doc?")
echo(arr: _*)
a Python se vería así:
def echo(*args):
for arg in args:
print "%s" % arg
arr = ["What's", "up", "doc?"]
echo(*arr)
y ambos dar el followin g salida:
What's
up
doc?
La diferencia: desembalaje parámetros posicionales
Mientras *
-operator de Python también puede ocuparse de desembalaje de posicionales parámetros/parámetros para las funciones-Arity fijo:
def multiply (x, y):
return x * y
operands = (2, 4)
multiply(*operands)
8
D ue va lo mismo con Scala:
def multiply(x:Int, y:Int) = {
x * y;
}
val operands = (2, 4)
multiply (operands : _*)
fallará:
not enough arguments for method multiply: (x: Int, y: Int)Int.
Unspecified value parameter y.
pero es posible lograr lo mismo con Scala:
def multiply(x:Int, y:Int) = {
x*y;
}
val operands = (2, 4)
multiply _ tupled operands
Según Lorrin Nelson así es como funciona:
The first part, f _, is the syntax for a partially applied function in which none of the arguments have been specified. This works as a mechanism to get a hold of the function object. tupled returns a new function which of arity-1 that takes a single arity-n tuple.
Futher lectura:
¡Gracias por indicarme que escriba adscripción! – Chris