9
votes

Fermetures Scala sur Wikipedia

a trouvé le snippet suivant sur le fermeture page sur wikipedia xxx

corrigez-moi si je me trompe, mais ce n'est pas une fermeture? C'est une fonction littérale, une fonction nommée, une fonction Lambda, mais pas une fermeture?


2 commentaires

Pourquoi le seuil est-il un terme fermé? C'est une variable locale capturée par la fonction lorsqu'elle est transmise à la méthode du filtre, non?


vous avez raison. Le seuil n'est pas un terme fermé, sa variable libre et la fermeture est un terme ouvert.


3 Réponses :


1
votes

Je ne suis pas tout à fait sûr, mais je pense que tu as raison. Une fermeture ne nécessite pas d'état (je suppose que les variables libres ...)?

Ou peut-être que la liste est la variable gratuite?


1 commentaires

"Scala's Type Inference System reconnaît automatiquement l'argument à filtrer pour être une fonction qui prend un livre et retourne une valeur booléenne et la transforme en une fermeture".



14
votes

Eh bien ... Si vous souhaitez être technique, il s'agit d'une fonction littérale qui est traduite au moment de l'exécution en une fermeture, fermant les termes ouverts (les liant à un VAL / VAR dans le cadre du littéral de la fonction). En outre, dans le contexte de cette fonction littéral ( _. Ventes> = seuil code>), Seuil code> est une variable em> libre em>, comme la fonction littérale ne donne aucun sens. En soi, _. Ventes> = seuil code> est un ouvert terme em> au moment de l'exécution, il est lié à la variable locale de la fonction, chaque fois que la fonction est appelée.

Prenez cette fonction par exemple, générer des fermetures: p> xxx pré>

au moment de l'exécution, le code suivant produit 3 fermetures. Il est également intéressant de noter que b et c ne sont pas la même fermeture ( b == c code> donne false code>). P>

val a = makeIncrementer(10)
val b = makeIncrementer(20)
val c = makeIncrementer(20)


0 commentaires

0
votes

Autant que je sache, il s'agit d'une fermeture contenant un paramètre formel, le seuil de seuil et la variable de contexte, Booklist < / fort>, de la portée enfermante. Donc, la valeur de retour (liste [Any]) de la fonction peut modifier tout en appliquant la fonction de prédicat du filtre. Il varie en fonction des éléments de la liste (Brochlist) variable du contexte.


0 commentaires