Lua-Funktionen

In Lua sind Funktionen die primäre Methode, um Anweisungen und Ausdrücke zu abstrahieren. Sie können sowohl verwendet werden, um bestimmte Aufgaben zu erledigen, als auch um Werte zu berechnen.

Lua bietet viele integrierte Funktionen, die Sie in Ihren Programmen bequem aufrufen können. Zum Beispiel gibt die Funktion print() die übergebenen Parameter auf der Konsole aus.

Lua-Funktionen haben hauptsächlich zwei Verwendungszwecke:

  • 1. Bestimmte Aufgaben ausführen; in diesem Fall wird die Funktion als Aufrufanweisung verwendet;
  • 2. Werte berechnen und zurückgeben; in diesem Fall wird die Funktion als Ausdruck in einer Zuweisungsanweisung verwendet.

Funktionsdefinition

Das Format der Funktionsdefinition in der Programmiersprache Lua ist wie folgt:

optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
    function_body
    return result_params_comma_separated
end

Erklärung:

  • optional_function_scope:Dieser Parameter ist optional und gibt an, ob die Funktion global oder lokal ist. Wenn dieser Parameter nicht gesetzt ist, ist die Funktion standardmäßig global. Wenn Sie die Funktion als lokale Funktion festlegen möchten, verwenden Sie das Schlüsselwortlocal。

  • function_name: Geben Sie den Funktionsnamen an.

  • argument1, argument2, argument3..., argumentn: Funktionsparameter; mehrere Parameter werden durch Kommas getrennt. Die Funktion kann auch keine Parameter haben.

  • function_body: Funktionskörper: der Block von Codeanweisungen, die in der Funktion ausgeführt werden müssen.

  • result_params_comma_separated: Rückgabewerte der Funktion. Lua-Funktionen können mehrere Werte zurückgeben, die jeweils durch Kommas getrennt sind.

  • Beispiel

    Das folgende Beispiel definiert die Funktionmax(), mit den Parametern num1, num2, die verwendet wird, um die beiden Werte zu vergleichen und den Maximalwert zurückzugeben:

    Beispiel

    --[[ Funktion gibt das Maximum von zwei Werten zurück --]]
    function max(num1, num2)

       if (num1 > num2) then
          result = num1;
       else
          result = num2;
       end

       return result;
    end
    -- Funktion aufrufen
    print("Das Maximum der beiden Werte ist ",max(10,4))
    print("Das Maximum der beiden Werte ist ",max(5,6))

    Die Ausgabe des obigen Codes ist:

    两值比较最大值为     10
    两值比较最大值为     6
    

    In Lua können wir Funktionen als Argumente an andere Funktionen übergeben, wie im folgenden Beispiel:

    Beispiel

    myprint = function(param)
       print("This is the print function - ##",param,"##")
    end

    function add(num1,num2,functionPrint)
       result = num1 + num2
       -- Rufe den übergebenen Funktionsparameter auf
       functionPrint(result)
    end
    myprint(10)
    -- die myprint-Funktion wird als Argument übergeben
    add(2,5,myprint)

    Die Ausgabe des obigen Codes ist:

    这是打印函数 -   ##    10    ##
    这是打印函数 -   ##    7    ##
    

    Mehrere Rückgabewerte

    Lua-Funktionen können mehrere Ergebniswerte zurückgeben, wie string.find, das die "Start- und Endindizes" der übereinstimmenden Zeichenkette zurückgibt (oder nil, wenn keine Übereinstimmung gefunden wird).

    > s, e = string.find("www.example.com", "example") 
    > print(s, e)
    5    10
    

    In Lua-Funktionen listen Sie die Werte auf, die nach return zurückgegeben werden sollen, um mehrere Werte zurückzugeben, zum Beispiel:

    Beispiel

    function maximum (a)
        local mi = 1             -- Index des Maximalwerts
        local m = a[mi]          -- Maximalwert
        for i,val in ipairs(a) do
           if val > m then
               mi = i
               m = val
           end
        end
        return m, mi
    end

    print(maximum({8,10,23,12,5}))

    Die Ausgabe des obigen Codes ist:

    23    3
    

    Variable Argumente

    Lua-Funktionen können eine variable Anzahl von Parametern akzeptieren. Ähnlich wie in C verwendet man drei Punkte in der Parameterliste der Funktion... , um anzuzeigen, dass die Funktion variable Parameter hat.

    function add(...)  
    local s = 0  
      for i, v in ipairs{...} do   --> {...} 表示一个由所有变长参数构成的数组  
        s = s + v  
      end  
      return s  
    end  
    print(add(3,4,5,6,7))  --->25

    Wir können die variablen Argumente einer Variablen zuweisen.

    Zum Beispiel berechnen wir den Durchschnitt mehrerer Zahlen:

    Beispiel

    function average(...)
       result = 0
       local arg={...}    --> arg ist eine Tabelle, lokale Variable
       for i,v in ipairs(arg) do
          result = result + v
       end
       print("Insgesamt übergebene " .. #arg .. " Zahlen")
       return result/#arg
    end

    print("Der Durchschnitt ist",average(10,5,3,4,5,6))

    Die Ausgabe des obigen Codes ist:

    总共传入 6 个数
    平均值为    5.5
    

    Wir können auch select("#",...) verwenden, um die Anzahl der variablen Argumente zu erhalten:

    Beispiel

    function average(...)
       result = 0
       local arg={...}
       for i,v in ipairs(arg) do
          result = result + v
       end
       print("Insgesamt übergebene " .. select("#",...) .. " Zahlen")
       return result/select("#",...)
    end

    print("Der Durchschnitt ist",average(10,5,3,4,5,6))

    Die Ausgabe des obigen Codes ist:

    总共传入 6 个数
    平均值为    5.5
    

    Manchmal benötigen wir einige feste Parameter plus variable Argumente. Feste Parameter müssen vor den variablen Argumenten stehen:

    Beispiel

    function fwrite(fmt, ...)  ---> Fester Parameter fmt
        return io.write(string.format(fmt, ...))    
    end

    fwrite("example\n")       ---> fmt = "example", keine variablen Argumente.
    fwrite("%d%d\n", 1, 2)   ---> fmt = "%d%d", variable Argumente sind 1 und 2

    Die Ausgabe ist:

    example
    12
    

    Wenn Sie normalerweise über variable Argumente iterieren, müssen Sie nur{…}verwenden, variable Argumente können jedoch einigenilenthalten, dann können Sie die Funktionselectverwenden, um auf die variablen Argumente zuzugreifen:select('#', …)oderselect(n, …)

    • select('#', …)Gibt die Länge der variablen Argumente zurück.
    • select(n, …)Wird verwendet, um ab der Startpositionndie Liste aller Argumente von der Start- bis zur Endposition zurückzugeben.

    Beim Aufruf von select müssen Sie einen festen tatsächlichen Argumentselektor (Selektor-Schalter) und eine Reihe variabler Argumente übergeben. Wenn der Selektor die Zahl n ist, gibt select die Argumentliste ab Indexnbis zur Endposition zurück, alle Argumentlisten; andernfalls kann er nur die Zeichenkette sein#, in diesem Fall gibt select die Gesamtzahl der variablen Argumente zurück.

    Beispiel

    Funktion f(...)
        a = select(3,...)  --> Ab der dritten Position entspricht die Variable a dem ersten Parameter in der Variablenliste auf der rechten Seite
        print (a)
        print (select(3,...)) --> Alle Listenparameter ausgeben
    end

    f(0,1,2,3,4,5)

    Die Ausgabe ist:

    2
    2       3       4       5

    Beispiel

    do  
        function foo(...)  
            for i = 1, select('#', ...) do  --> Die Gesamtzahl der Parameter ermitteln
                local arg = select(i, ...); --> Parameter lesen; arg entspricht dem ersten Parameter in der Variablenliste auf der rechten Seite
                print("arg", arg);  
            end  
        end  
     
        foo(1, 2, 3, 4);  
    end

    Die Ausgabe ist:

    arg    1
    arg    2
    arg    3
    arg    4
    
    Andere Erweiterungen