ElFerrocarrilero Geschrieben Montag um 13:56 Uhr Geschrieben Montag um 13:56 Uhr (bearbeitet) Greetings, Um eine Funktion für mehrere Ereignisse benutzen zu können, habe ich versucht, sie in einer Tabelle unterzubringen, die dann zu einer Ereignis-Variablen gemacht wird. Das gelingt aber nicht, siehe Demo-Code mit Kommentaren. Geht das wirklich nicht, oder übersehe ich da was? Danke für alle Tips. Cheers, El Ferrocarrilero --[[ Funktionen als Tabellen-Elemente *in einer Ereignis-Variablen* ? (als auslösendes Ereignis dient Betätigung eines Schalters) --]] tb = { eins = 111, zwei = 222, doSomething = function(etwas) print("Funktion tb.doSomething: " .. tostring(etwas)) end, drei = 333 } n = 0 for _ in pairs(tb) do n = n + 1 end -- (Anscheinend die einzige Art, die Länge einer Tabelle mit nicht-numerischen Indices -- zu bestimmen; #tb funktioniert _nicht_ (learned it the hard way...:-/ ) print(">>>> Einträge in lokaler Tabelle tb: " .. tostring(n)) --> 4 OK print(tb.doSomething("Hallo!")) --> Funktion tb.doSomething: Hallo! OK -- mit einer Tabelle direkt im Skript geht es also. So weit, so gut. -- nun die Tabelle mit enthaltener Funktion zu Ereignis-Variabler machen: -- (geht wohl nicht in der grafischen EV. I think. -- Dort z.B. als "Text (mehrzeilig)" eingegebene Funktion funktioniert (logischerweise) nicht.) $("Ereignisse").variables.tbNEU = tb --> Module-Var. wird gesetzt --> Ereignisse, "tbNEU", {3 Elemente} -- sollten 4 Elemente sein, aber Inspektion in der EV zeigt, dass die Funktion fehlt n2 = 0 for _ in pairs($("Ereignisse").variables.tbNEU) do n2 = n2 + 1 end print(">>>>> Einträge in Ereignis-Variable (Tabelle) tbNEU: " .. n2) --> 3 korrekt, weil die Funktion fehlt z = $("Ereignisse").variables.tbNEU.drei print("tbNEU.drei: " .. z) --> tbNEU.drei: 333 OK, "normale" Einträge tuns also... -- ... die Funktion aber nicht: out = $("Ereignisse").variables.tbNEU.doSomething("Huhu!") --> Skriptfehler: attempt to call a nil value (field 'doSomething') -- (traurig aber logisch, da Funktion gar nicht in die Ereignis-Var. übernommen wurde) print(out) -- Sorry, Dave, I can't do that... Bearbeitet Montag um 14:07 Uhr von ElFerrocarrilero
Goetz Geschrieben Montag um 15:33 Uhr Geschrieben Montag um 15:33 Uhr vor 1 Stunde schrieb ElFerrocarrilero: Geht das wirklich nicht Hallo El Ferrocarrilero! Es geht nicht auf diesem Weg, weil du mit den Modul- und Objektvariablen die Lua-Umgebung verlässt. Diese Variablen werden in den Objekten des Studios verwaltet und können deshalb keine Lua Funktion enthalten. Aber die benutzerdefinierten Ereignisse verhalten sich wie Funktionen. Sie können Parameter haben und Werte zurückgeben. Und ein benutzerdefiniertes Ereignis kannst du in eine Modultabelle legen. damit hast du genau das, was dir vorschwebt. Viele Grüße Götz
ElFerrocarrilero Geschrieben Montag um 16:06 Uhr Autor Geschrieben Montag um 16:06 Uhr (bearbeitet) Hallo Götz, aha! Wieder was gelernt; den "benutzerdefinierten Ereignissen" war ich bisher eher aus dem Wege gegangen, werde sie mir aber nun mit Interesse genauer ansehen. 33 minutes ago, Goetz said: weil du mit den Modul- und Objektvariablen die Lua-Umgebung verlässt Das ist (vor allem am Anfang) immer etwas das Problem: man weiß oft nicht so recht, soll man bei der "allgemeinen" Lua-Sprache weitersuchen* oder geht es um etwas MBS-Spezifisches. Vielen Dank für die schnelle und hilfreiche Antwort! Cheers, El Ferrocarrillero * wo ich z.B. nun lernen konnte/musste/durfte , dass der # Operator mit nicht-numerisch indiziertenTabellen nicht funktioniert... Bearbeitet Montag um 16:08 Uhr von ElFerrocarrilero korrekter Dativ statt Bergischer Akkusativ :-)
Goetz Geschrieben Montag um 16:22 Uhr Geschrieben Montag um 16:22 Uhr vor 14 Minuten schrieb ElFerrocarrilero: Das ist (vor allem am Anfang) immer etwas das Problem Dafür hast du die Community hier, die in solchen Fällen gerne eigene Erfahrungen beisteuert und über Hürden hinweg hilft.
Goetz Geschrieben Montag um 16:26 Uhr Geschrieben Montag um 16:26 Uhr vor 16 Minuten schrieb ElFerrocarrilero: bei der "allgemeinen" Lua-Sprache [...] wo [...] der # Operator mit nicht-numerisch indiziertenTabellen nicht funktioniert... Ja, das ist bei Lua fies: Sie schmeißen Listen und Tabellen in einen Topf, aber trotzdem unterscheiden sich die beiden. Und um allem die Krone aufzusetzen, können Tabellen auch noch in Teilen eine Liste sein. Dieser Abschnitt verhält sich dann auch wie eine Liste.
ElFerrocarrilero Geschrieben Montag um 16:57 Uhr Autor Geschrieben Montag um 16:57 Uhr (bearbeitet) 31 minutes ago, Goetz said: Ja, das ist bei Lua fies: Sie schmeißen Listen und Tabellen in einen Topf, aber trotzdem unterscheiden sich die beiden Genau. Als Sprache einfach aussehen und einfach sein ist nicht dasselbe... ("Simple: Everything is a table! Except where it isn't.") Bearbeitet Montag um 16:58 Uhr von ElFerrocarrilero
ElFerrocarrilero Geschrieben Dienstag um 17:24 Uhr Autor Geschrieben Dienstag um 17:24 Uhr Hier zur Ergänzung (und für nachfolgende Generationen, die diesen Thread studieren) noch eine Mikro-"Anlage" (es gibt nicht mal Schienen!), welche die Umsetzung von Götz' Hinweisen demonstriert. Einzelheiten stehen in der "Anlagen"-Beschreibung. Cheers, El Ferrocarrilero Demo_zentrale_Funktionen.mbp
Empfohlene Beiträge
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 erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden