Lua prend en charge les fonctions anonymes, qui permettent notamment de créer des fermetures (closures). Une fonction anonyme est utile lorsqu’on souhaite définir une fonction sans lui donner de nom.
Voici un exemple :
|
|
La fonction intSeq
retourne une fonction anonyme définie à l’intérieur de son corps. Cette fonction retournée capture la variable i
et forme ainsi une fermeture.
Chaque appel à nextInt()
met à jour et utilise sa propre version de i
, stockée dans la fermeture.
État indépendant pour chaque fermeture
Pour démontrer que chaque fermeture maintient son propre état, examinons cet exemple :
|
|
Comme vous pouvez le voir, newInts
redémarre à 1, car il s’agit d’une nouvelle fermeture indépendante. Cela permet de créer des générateurs ou des objets avec état très facilement en Lua.