Scala fonction currying (Currying)
Corroyage (corroyage) fait référence à la fonction d'origine accepte deux paramètres dans une nouvelle fonction accepte un paramètre du processus. Une nouvelle fonction retourne le deuxième paramètre est la fonction initiale du paramètre.
Exemples
Tout d'abord, nous définissons une fonction:
def add(x:Int,y:Int)=x+y
Ainsi, lorsque nous avons appliqué, il doit être utilisé comme ceci: ajouter (1,2)
Maintenant, nous regardons cette forme de changement de fonction:
def add(x:Int)(y:Int) = x + y
Ainsi, lorsque nous avons appliqué, il doit être utilisé comme ceci: add (1) (2), les résultats finaux sont les mêmes est 3, cette approche (processus) est appelé currying.
processus de mise en œuvre
ajouter (1) (2) est en fait une fonction appelle à son tour deux (fonction non-cari) ordinaire, le premier appel à l'aide d'un paramètre x, la valeur de retour d'un type de fonction, et le second paramètre y appeler ce type de fonction valeur.
Le premier essentiellement évolué en une méthode:
def add(x:Int)=(y:Int)=>x+y
Ensuite, cette fonction est ce que cela signifie? Réception d'un x comme paramètre et retourne une fonction anonyme, la définition de la fonction anonyme est: recevoir un argument Int y, le corps de la fonction est x + y. Maintenant, nous appelons cette méthode.
val result = add(1)
Retourne un résultat, la valeur de ce résultat devrait être une fonction anonyme: (y: Int) => 1 + y
Ainsi, afin d'obtenir des résultats, nous continuons à appeler le résultat.
val sum = result(2)
Enfin, imprimez résultat est 3.
exemple complet
Voici un exemple complet:
object Test { def main(args: Array[String]) { val str1:String = "Hello, " val str2:String = "Scala!" println( "str1 + str2 = " + strcat(str1)(str2) ) } def strcat(s1: String)(s2: String) = { s1 + s2 } }
Mise en œuvre du code ci-dessus, la sortie est:
$ scalac Test.scala $ scala Test str1 + str2 = Hello, Scala!