Vor ein paar Tagen wunderte ich mich, warum meine EEPOnSignal_X()-Funktionen nicht aufgerufen werden.
Wie sich herausstellte, hatte ich den EEPRegisterSignal()-Aufruf vergessen
Damit dieser und andere Fehler nicht nochmal passieren, habe ich ein kleines Lua-Modul geschrieben: onSignal.
Damit kann man statt
EEPRegisterSignal(1)
function EEPOnSignal_1(position)
print("Signal 1 ist nun in Position "..position)
end
folgendes schreiben:
onSignal[1] = function(position)
print("Signal 1 ist nun in Position "..position)
end
Zugegeben, das ist jetzt nicht so viel kürzer, im wesentlichen spart man sich den Aufruf von EEPRegisterSignal(1). Das macht onSignal nämlich automatisch, sobald man eine Callback-Funktion definiert.
Gleichzeitig prüft onSignal aber noch ein paar Dinge:
- Ist die angegebene ID eine Zahl? (vermutlich schon, das schafft man wohl noch)
- Gibt es überhaupt ein Signal mit der angegebenen ID? (wenn nicht, deutet das auf einen Tippfehler hin)
- Wurde nicht vorher schon eine Callback-Funktion für dieses Signal definiert? (wenn doch, würde die Funktion überschrieben. Und dann wundert man sich, warum die vorherige Funktion nicht mehr aufgerufen wird.)
Das frühzeitige Melden von Fehlern kann euch später eine langwierige Fehlersuche ersparen.
Und weil die ID nicht mehr Teil des Funktionsnamens ist, kann auch einfach eine Variable dafür eingesetzt werden - sowas wie _ENV["EEPOnSignal_"..id] ist dann nicht mehr nötig.
Ich hoffe, der eine oder andere kann etwas damit anfangen.
Einen Download und genauere Infos findet ihr auf meiner Homepage.
Viele Grüße
Benny
PS: Für Weichen funktioniert das ganze natürlich auch - das läuft dann über onSwitch[id].