Lua gestionnaire d'événements
Ne lua ont un "gestionnaire d'événement" construire ou a-t-elle une lib disponible pour le faire?
De sorte que, par exemple, quand "a = 100," un événement se produit.
Quelque chose d'autre plutôt que d'utiliser:
while true do
if a == 100 then
[...]
break;
end
end
Ou tout simplement l'ajout d'un sommeil. Le "while true do" c'est juste un exemple, mais de son une terrible.
Bien. Fondamentalement vérifier sur une valeur et si elle répond aux exigences d'un événement. Tout simplement pas le faire d'une façon de "fi" ou comme ci-dessus "while true do" parce qu'il n'est pas approprié. L'exigence peut être satisfaite à tout moment, et non une partie ou de temps où je peux appeler une instruction if, par exemple. J'espère que l'explique un peu.
OriginalL'auteur luacoder | 2011-11-29
Vous devez vous connecter pour publier un commentaire.
Lua opère dans un seul thread, aucune vérification doit être explicitement effectué par votre code.
La loi d'exécution du code immédiatement après un changement de variable est connue comme "regarder".
Si vous êtes à la programmation dans un environnement où un ensemble de code est exécuté chaque cadre (comme un jeu), vous pouvez vérifier manuellement.
Par exemple:
Sur l'image suivante, le rappel de code (impression) sera exécutée.
L'inconvénient de cette approche est que le rappel de code n'est pas imprimé immédiatement après
WatchedVariables.a
est fixé à-7
, c'est: la sortie sera:Pour éviter cela risque de comportements indésirables, d'un setter fonction peut être utilisée, par exemple:
La sortie de ce code montre que le rappel s'exécute immédiatement:
De le rendre plus confortable, Lua offre metatables qui font qu'un tel comportement transparent pour le programmeur.
Exemple:
La sortie de ce code sera le même que pour l'exemple précédent:
Voici une implémentation pour votre exemple de cas:
Pourquoi les variables
__privates
et__private_callback
préfixé par deux caractères de soulignement? Il est convention de préfixe des membres privés qui ne devraient pas être accessibles en programmation typiques de situations avec deux caractères de soulignement. Si vous connaissez orientée objet, la méthodologie et la mise en oeuvre dans des langages tels que Java et C++, vous comprendrez comment il est similaire à laprivate
etprotected
mots-clés.Si vous êtes familier avec le langage C#, vous pouvez voir comment le
set_a
/get_a
et métatable implémentations sont similaires à des accesseurs (set
/get
).Grande réponse. C'est exactement ce que j'ai pensé qu'il serait à son tour sur la metatables.
Heureux de vous aider. Juste être prudent avec dont
__privates
vous toucher... vous ne savez pas ce que vous allez prendre.OriginalL'auteur Deco