Jump to content

Lua - if-Zeile mit 6 Kriterien


jloos

Empfohlene Beiträge

Hallo,

ich möchte eine IF Entscheidung, die diese Bedingungen enthält.

if   (Fahrzeug steht auf ( GKT1 oder GKT2 oder GKT3 )) und (Fahrstraße ist aktiv ( FS1 oder FS2 oder FS3 )) then

code ausführen

end

 

Ich habe es aber nicht hinbekommen, da komme ich an meine LUA Grenzen.

Kann mir bitte jemand helfen, danke

Gruß Jürgen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich bin zwar kein Lua-Experte, aber so müsste es gehen.

if (#layout:getVehiclesOn($("GKT1")) > 0) or (#layout:getVehiclesOn($("GKT2")) > 0) or (#layout:getVehiclesOn($("GKT3")) > 0) then
  if ($("FS1").active) or ($("FS2").active) or ($("FS3").active) then
    $("Taster").state = ($("Taster").state + 1) % $("Taster").stateCount
  end
end

HG
Brummi

Link zu diesem Kommentar
Auf anderen Seiten teilen

Für bessere Lesbarkeit würde ich den Vorschlag von @Roter Brummer ein wenig umwandeln:

local aufGK = #layout:getVehiclesOn($("GKT1")) > 0 or #layout:getVehiclesOn($("GKT2")) > 0 or #layout:getVehiclesOn($("GKT3")) > 0
local aktiveFS = $("FS1").active or $("FS2").active or $("FS3").active

if aufGK and aktiveFS   then
  -- Action!!!
end

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Jürgen @jloos,

zwischen den drei Vorschlägen gibt es funktional keinen Unterschied. Was für Dich besser lesbar ist, musst Du entscheiden. Mein Einzeiler entspricht jedenfalls exakt Deiner Anfrage, in der Du die Logik einschließlich der erforderlichen Klammern richtig formuliert hattest. Ich habe mit meinem Einzeiler nur Deine Anfrage übersetzt.

Beste Grüße

Phrontistes

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja Danke @Phrontistes ,

Deine Zeile ist klar und deutlich für mich. Habe ich auch verwendet. Als dann die Lösung von @Goetz kam, wurde ich neugierig und wollte wissen wie das funktioniert.

Ich habe Anfang der 80'er Jahre ein bißchen dBase programmiert. Das ist mein Erfahrungsschatz. Lang lang ist her. 

Vielen Dank an Alle, 

Gruß Jürgen 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb jloos:

Was für Variablen sind aufGK und aktiveFS?

Hallo Jürgen,
Mit 

#layout:getVehiclesOn($("GKT1")) > 0

erhältst du als Ergebnis wahr, wenn die Anzahl (#) Fahrzeuge auf dem Kontakt größer als 0 ist. Andernfalls bekommst du falsch.
Dieses Ergebnis nennt man ein Boolean und du kannst es wie Zahlen oder Texte in einer Variablen speichern. Dazu schreibst du (wie bei jeder Zuweisung) zuerst den Namen der Variablen, dann ein = Zeichen und dahinter den Ausdruck.

Wenn du mehrere solche Ausdrücke mit or verknüpfst, dann ist das Ergebnis dieser Operation wahr, wenn mindestens einer der verknüpften Ausdrücke wahr ist. Und wenn das alles rechts vom = steht, dann wird zuerst der ganze Sermon ausgewertet und das Ergebnis (entweder wahr oder falsch bzw. true oder false) in der Variablen gespeichert, deren Namen links vom = steht. Das ist im Kern nichts anderes als bei einer Rechenoperation, wo du links  vom = den Namen der Variablen hinschreibst und rechts sowas wie 2 * 4.

Würdest du stattdessen alles hinter das if schreiben, dann würde im Grunde dasselbe passieren. Der ganze Kladeradatsch wird ausgewertet, liefert im Ergebnis entweder true oder false und das nutzt if um zu entscheiden, ob das hinter dem then ausgeführt werden soll oder nicht. Ich erzeuge stattdessen erst das true oder false, lege es im Zwischenschritt in einer Variablen ab und benutze die dann hinter dem if. Der einzige Zweck ist, dass ich die Sache in kleinere Brocken unterteile. Die sind später leichter zu handhaben, wenn man Änderungen vornimmt.

Viele Grüße
Götz

Bearbeitet von Goetz
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...