Lua-event-handler
Tut lua haben ein "event-handler" bauen oder gibt es eine lib gibt, die das tun?
So, dass, beispielsweise, wenn "a = 100" ein Ereignis passiert.
Etwas anderes statt:
while true do
if a == 100 then
[...]
break;
end
end
Oder einfach das hinzufügen ein Schlaf. Die "while true do" ist nur ein Beispiel, aber es ist eine schreckliche.
Gut. Im Grunde schauen Sie auf einen Wert und wenn es die Anforderungen erfüllt, die ein Ereignis aufgerufen wird. Nur nicht tun es in einer Weise des "ifs" oder wie oben "while true do", weil es nicht geeignet. Die Anforderung kann erfüllt werden, in jedem moment, nicht einen bestimmten Teil oder Zeit, wo ich anrufen kann eine if-Anweisung, zum Beispiel. Ich hoffe, dass erklärt es ein bisschen.
InformationsquelleAutor luacoder | 2011-11-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lua arbeitet in einem single-thread, also der Prüfung muss ausdrücklich erfolgt durch Ihren code.
Den Akt der Durchführung von code direkt auf eine variable ändert, ist bekannt als "beobachten".
Wenn Sie Programmieren in einem Umfeld, wo eine Reihe von code ausführen alle Rahmen (wie ein Spiel), können Sie manuell zu überprüfen.
Zum Beispiel:
Beim nächsten frame, Rückruf-code (das drucken) ausgeführt werden.
Der Nachteil dieses Ansatzes ist, dass die callback-code wird nicht gedruckt sofort nach
WatchedVariables.a
eingestellt ist-7
, das ist: der Ausgang wird sein:Um zu verhindern, dass diese potenziell unerwünschte Verhalten, eine setter - Funktion kann verwendet werden, zum Beispiel:
Die Ausgabe dieses code zeigt an, dass der Rückruf wird sofort ausgeführt:
Um diese komfortabler, Lua bietet metatables, dass solche Verhaltensweisen für den Programmierer transparent.
Beispiel:
Die Ausgabe von diesem code werden die gleichen wie im vorherigen Beispiel:
Hier ist eine Implementierung für dein Beispiel Fall:
Warum sind die Variablen
__privates
und__private_callback
beginnen mit zwei Unterstrichen? Es ist Konvention Präfix private Mitglieder, die nicht zugegriffen werden soll, in typischen Programmier-Situationen mit zwei Unterstrichen. Wenn Sie vertraut mit der objektorientierten Methodik und die Implementierung in Sprachen wie Java und C++, werden Sie verstehen, wie es ist ähnlich wie dieprivate
undprotected
keywords.Wenn Sie vertraut sind mit der Sprache C#, können Sie sehen, wie die
set_a
/get_a
und metatable Implementierungen sind ähnlich Accessoren (set
/get
).Tolle Antwort. Das ist genau das, was ich dachte, es würde sich hinsichtlich der metatables.
Glücklich zu helfen. Nur vorsichtig sein, mit deren
__privates
Sie berühren... Sie wissen nicht, was Sie fangen.InformationsquelleAutor Deco