Fermetures Scala
Fonction Scala
Une fermeture est une fonction dont la valeur de retour dépend d'une ou plusieurs variables déclarées en dehors de la fonction.
Les fermetures peuvent généralement être considérées simplement comme une autre fonction pouvant accéder aux variables locales dans une fonction.
Par exemple, la fonction anonyme suivante :
val multiplier = (i:Int) => i * 10
Il y a une variable i dans le corps de la fonction, qui est utilisée comme paramètre de la fonction. Comme autre morceau de code ci-dessous :
val multiplier = (i:Int) => i * factor
Il y a deux variables dans le multiplicateur : i et factor. L'un des i est un paramètre formel de la fonction Lorsque la fonction multiplicateur est appelée, i se voit attribuer une nouvelle valeur. Cependant, le facteur n'est pas un paramètre formel, mais une variable libre Considérons le code suivant :
var factor = 3 val multiplier = (i:Int) => i * factor
Nous introduisons ici un facteur variable libre, qui est défini en dehors de la fonction.
Le multiplicateur de variable de fonction ainsi défini devient une "fermeture" car il fait référence à une variable définie en dehors de la fonction. Le processus de définition de cette fonction consiste à capturer cette variable libre pour former une fonction fermée.
Exemple complet
object Test { def main(args: Array[String]) { println( "muliplier(1) value = " + multiplier(1) ) println( "muliplier(2) value = " + multiplier(2) ) } var factor = 3 val multiplier = (i:Int) => i * factor }
Exécutez le code ci-dessus, le résultat de sortie est :
$ scalac Test.scala $ scala Test muliplier(1) value = 3 muliplier(2) value = 6