Pour les utilisateurs de Python :
Le système _*
est plus ou moins l'équivalent de l'opérateur *-opérateur .
Exemple
Conversion de l'exemple scala de la base de données lien fourni par Luigi Plinge :
def echo(args: String*) =
for (arg <- args) println(arg)
val arr = Array("What's", "up", "doc?")
echo(arr: _*)
en Python ressemblerait à ce qui suit :
def echo(*args):
for arg in args:
print "%s" % arg
arr = ["What's", "up", "doc?"]
echo(*arr)
et tous deux donnent le résultat suivant :
Qu'est-ce que
monter
doc ?
La différence : le décodage des paramètres de position
Alors que la fonction *
-L'opérateur peut également traiter le déballage des paramètres positionnels/paramètres pour les fonctions à polarité fixe :
def multiply (x, y):
return x * y
operands = (2, 4)
multiply(*operands)
8
Faire la même chose avec Scala :
def multiply(x:Int, y:Int) = {
x * y;
}
val operands = (2, 4)
multiply (operands : _*)
échouera :
pas assez d'arguments pour la méthode multiplier : (x : Int, y : Int)Int.
Paramètre de valeur non spécifiée y.
Mais il est possible de faire la même chose avec scala :
def multiply(x:Int, y:Int) = {
x*y;
}
val operands = (2, 4)
multiply _ tupled operands
Selon le Lorrin Nelson voici comment cela fonctionne :
La première partie, f _, est la syntaxe d'une fonction partiellement appliquée dans laquelle aucun des arguments n'a été spécifié. Il s'agit d'un mécanisme permettant d'obtenir l'objet fonction. tupled renvoie une nouvelle fonction d'arité-1 qui prend un seul tuple d'arité-n.
Autres lectures :