Fonction de haut niveau
Au cours de la programmation fonctionnelle avec Scala, j'ai vu deux formes de déclaration d'un fichier def
. Mais je ne connais pas les différences entre eux, et le nom donné pour cela. Comment puis-je obtenir plus d'informations à ce sujet?
Déclaration 1
def sum(f: Int => Int)(a: Int, b: Int): Int = ???
Déclaration 2
def sum(f: Int => Int, a: Int, b: Int): Int = ???
La première est appelée la syntaxe curry.
Vous pouvez appliquer la fonction partiellement, ce qui entraîne le retour d'une nouvelle fonction.
scala> def sum(f: Int => Int)(a: Int, b: Int): Int = f(a) + f(b)
sum: (f: Int => Int)(a: Int, b: Int)Int
scala> sum({x: Int => x + 1}) _
res10: (Int, Int) => Int = $$Lambda$1115/108209958@474821de
La deuxième est la syntaxe non curry mais nous pouvons toujours appliquer la fonction partiellement même dans ce cas.
scala> def sum(f: Int => Int, a: Int, b: Int): Int = f(a) + f(b)
sum: (f: Int => Int, a: Int, b: Int)Int
scala> sum({x: Int => x + 1}, _: Int, _: Int)
res11: (Int, Int) => Int = $$Lambda$1116/1038002783@1a500561
Encore une fois une nouvelle fonction renvoyée lorsqu'elle est appliquée partiellement.
Il n'y a pas de différence entre les deux déclarations ci-dessus, c'est juste le sucre syntaxique.