fermeture Scala
La fermeture est une fonction qui renvoie une valeur dépendant de la déclaration externe dans une fonction ou plusieurs variables.
Fermetures Généralement considérés comme simplement une autre fonction à l'intérieur d'une fonction peut accéder aux variables locales.
Cette fonction anonyme comme suit:
val multiplier = (i:Int) => i * 10
Corps de fonction a une variable i, en tant que paramètre de fonction. Un autre morceau de code comme suit:
val multiplier = (i:Int) => i * factor
Il y a deux variables dans le multiplicateur: i et le facteur. Où i est un paramètre formel de la fonction, la fonction est appelée lorsque le multiplicateur, on m'a donné une nouvelle valeur. Cependant, le facteur ne sont pas les paramètres formels, mais les variables libres, considérez les codes suivants:
var factor = 3 val multiplier = (i:Int) => i * factor
Ici, nous introduisons un facteur variable libre, cette variable est définie en dehors de la fonction.
variables de la fonction Multiplicateur ainsi définie comme une «fermeture», car il se réfère à une variable en dehors de la définition de la fonction, la définition du processus de cette fonction est de capturer les variables libres constituent 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 }
Mise en œuvre du code ci-dessus, la sortie est:
$ scalac Test.scala $ scala Test muliplier(1) value = 3 muliplier(2) value = 6