2 Stimmen

Wie lässt sich eine lange Kette von elseif-Anweisungen verbessern?

Ich habe etwa 100 dieser if-Anweisungen, könnte ich das besser machen?

function onSay (cid, words, param)
    mark = string.lower(param)
    if mark == "kojo" then
        moveTo(cid, {x=32838, y=31926, z=7})
        sendEffect({x=32838, y=31926, z=7}, 10)
    elseif mark == "habala" then
        moveTo(cid, {x=32838, y=31926, z=7})
        sendEffect({x=32838, y=31926, z=7}, 10)
    end
    -- and so on.....
end

9voto

JeffK Punkte 2989

Erstellen Sie eine Tabelle mit mark als Schlüssel, wobei jedes Element eine Tabelle ist, die die vier Parameter ( x , y , z und was auch immer das letzte 10 vertritt). Dann wird Ihr onSay Methode kann als Tabellenabfrage implementiert werden, gefolgt von Aufrufen von moveTo y sendEffect unter Verwendung der Werte aus dem identifizierten Element. Sie müssen die Tabelle zwar immer noch erstellen, aber Sie können sie vielleicht aus einer Datei lesen oder in ein separates Modul verschieben, damit sie nicht Ihre onSay Methode.

1voto

Scott Sellers Punkte 4628

LUA fehlt ein C-artiger Schalter, dieses Problem wird diskutiert aquí und schlagen verschiedene Methoden vor, die Sie anwenden könnten.

0voto

Mojimi Punkte 1583

Wenn ich verstehe, was Sie vorhaben, könnten Sie versuchen, mit

function onSay (cid, words, param)
mark = param:lower()

if mark:search("kojo", "habala", "and", "so", "goes", "on")  
 then
     moveTo(cid, {x=32838, y=31926, z=7})
     sendEffect({x=32838, y=31926, z=7}, 10)
end

natürlich nur, wenn moveTo und sendEffect immer dieselben Werte haben

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X