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
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
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
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
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
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
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
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
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 4Andere Erweiterungen