Jump to content

Besteht Interesse an einem Lua-Tutorial?


Empfohlene Beiträge

vor 25 Minuten schrieb Andy:

deferred_call etc.

Der "deferred call" (= verzögerter Aufruf) ist auch in der EV zu erkennen, bevor du in Lua umwandelst.

Du siehst eine blaue Box mit der Aktion "Ausführung verzögern".
Und oben einen Hinweis zum Grund für die Verzögerung und eine Erklärung dazu, wann sie benötigt wird.

896143700_deferredcallinderEV.thumb.jpg.e6deabec12a6b5461d6b8f4ae2dd2177.jpg

 

Am bequemsten ist, wenn man den Befehl schon vor der Umwandlung in Lua rausschmeißt.
Denn nachträglich muss man die ganze "if … elseif … end" Klammer rausschmeißen. Das ist mühseliger und fehlerträchtiger.

Mit deferred call:

if not deferredCall then
  defer(0, "_Compatibility_Delay")
elseif deferredCall == "_Compatibility_Delay" then
  $("Ereignisse").variables["Anzahl"] = $("Ereignisse").variables["Anzahl"] + 1
  
  $("Ausgabe").text = $("Ereignisse").variables["Anzahl"]
end

Du benötigst nur den Block im elseif. Der Rest ist die Zeitverzögerung für die Synchronisation.
ohne deferred call:

$("Ereignisse").variables["Anzahl"] = $("Ereignisse").variables["Anzahl"] + 1

$("Ausgabe").text = $("Ereignisse").variables["Anzahl"]

 

Zu den übrigen "paar Systemaufrufen" kann ich noch nichts sagen, weil die mir noch nicht begegnet sind.

Bearbeitet von Goetz
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

bedenkt, dass die Verzögerung nicht primär für die Kompatibilität zu V4 entwickelt wurde, dahinter steckt ein mächtiges Feature, was den Timern Konkurrenz macht, Stichwort Zugweiterfahrt nach einer Pause.

Liest eigentlich niemand die integrierte  Code-Hilfe zu den Lua-Befehlen? 9_9

Viele Grüße, 

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 3 Minuten schrieb Neo:

Liest eigentlich niemand die integrierte  Code-Hilfe zu den Lua-Befehlen?

dumdidum...
die weiteren Informationen, auf die Götz verwiesen hat schon. Habe sie aber nicht mit dem deferred call in Verbindung gebracht.

Bearbeitet von Andy
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 5 Wochen später...

Hallo @Goetz,

mit dem vorletzen Beispiel im Abschnitt Tabellen Teil 2 habe ich ein Problem:

Ich habe das Beispiel um zwei Zeilen erweitert und erwartet, dass die „sieben“ in die Lücke beim Index 2 einsortiert wird. Macht Lua aber nicht.

Wo ist mein Denkfehler?

kokos

insert.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 9 Stunden schrieb kokos:

Wo ist mein Denkfehler?

Ich denke nicht, dass du einen Denkfehler machst, sondern dass Lua sich hier unorthodox verhält.
Vielleicht liegt es daran, dass die erste Lücke sozusagen vor der Tabelle liegt.

Die Lücken liegen in Lua nicht sortiert vor. Deshalb hast du keine Kontrolle darüber, welche Lücke Lua wann wählt.

Beispiel = {"Eins"}
Beispiel[4] = "Vier"
Beispiel[5] = "Fünf"
Beispiel[9] = "Neun"

table.insert(Beispiel, "Zwei")
table.insert(Beispiel, "Drei")
table.insert(Beispiel, "Sechs")
table.insert(Beispiel, "Sieben")
table.insert(Beispiel, "Acht")
table.insert(Beispiel, "Zehn")

for i = 1, 10 do
  print(("%2d - %s"):format(i, Beispiel[i]))
end

 

2045226006_table_insertTest.jpg.c42b14aaa75471ece1efe4b99e82ee1e.jpg

Das Wort "Zehn" ist an Position 11 eingefügt worden und deshalb in der Auflistung gar nicht zu sehen.

Bearbeitet von Goetz
Korrektur nach neuer Erkenntnis
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

ob es wirklich so ist, weiß ich nicht... meine Überlegung dazu ist folgende...

table.insert ohne Indexangabe fügt den Eintrag in einer fortlaufenden Tabelle (ohne Lücken) am Ende der Tabelle ein.
Ende der Tabelle ist da, wo es mit nil (kein weiterer Eintrag) weitergeht.
So gesehen trifft table.insert ohne Index bei einer Tabelle mit Lücken auf mehr als ein Ende (nil) und kann es sich sozusagen aussuchen wo der Eintrag hin könnte.

Gruß
EASY

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen.

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...