English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In Lua, le funzioni sono il principale metodo di astrazione di istruzioni e espressioni. Possono essere utilizzate per eseguire compiti speciali o calcolare valori.
Lua fornisce molte funzioni predefinite, che puoi chiamare facilmente nel tuo programma, come la funzione print() che stampa i parametri passati sullo schermo di controllo.
Le funzioni Lua hanno principalmente due utilizzi:
1. Completare il compito specificato, in questo caso la funzione viene utilizzata come istruzione di chiamata;
2. Calcolare e restituire un valore, in questo caso la funzione viene utilizzata come espressione di una istruzione di assegnamento.
Il formato di definizione della funzione del linguaggio di programmazione Lua è il seguente:
opzionale_ambito_di_funzione funzione nome_funzione( argomento1, argomento2, argomento3..., argomenton) function_body return result_params_comma_separated end
Analisi:
optional_function_scope: Questo parametro è opzionale per determinare se la funzione è una funzione globale o locale, se non è impostato il parametro, viene considerato come funzione globale per impostazione predefinita, se si desidera impostare la funzione come funzione locale, è necessario utilizzare la parola chiave local。
function_name: Specificare il nome della funzione.
argument1, argument2, argument3..., argumentn: Parametro della funzione, più parametri sono separati da virgola, la funzione può anche non avere parametri.
function_body: Corpo della funzione, il blocco di istruzioni da eseguire nella funzione.
result_params_comma_separated: Valore di ritorno della funzione, le funzioni del linguaggio Lua possono restituire più valori, ciascun valore è separato da una virgola.
Esempio di definizione della funzione max()Parametro num1, num2, utilizzato per confrontare due valori e restituire il valore massimo:
--[[ La funzione restituisce il valore massimo di due valori --]] funzione max(num1, num2) if (num1 > num2) then result = num1; else result = num2; end return result; end -- Chiamata della funzione print("Confronto di due valori, il valore massimo è ",max(10,4)) print("Confronto di due valori, il valore massimo è ",max(5,6))
Il risultato dell'esecuzione del codice sopra è:
Confronto di due valori, il valore massimo è 10 Confronto di due valori, il valore massimo è 6
In Lua possiamo passare una funzione come parametro a un'altra funzione, come nell'esempio seguente:
myprint = funzione(param) print("Questa è la funzione di stampa - ##",param,"##") end funzione add(num1,num2,functionPrint) result = num1 + num2 -- Chiamata del parametro funzione trasmesso functionPrint(result) end myprint(10) -- myprint funzione come parametro trasmesso add(2,5,myprint)
Il risultato dell'esecuzione del codice sopra è:
Questa è la funzione di stampa - ## 10 ## Questa è la funzione di stampa - ## 7 ##
La funzione Lua può restituire più valori di ritorno, ad esempio string.find, che restituisce la stringa di corrispondenza "inizio e fine degli indici" (se non esiste una stringa di corrispondenza restituisce nil).
> s, e = string.find("it.oldtoolbag.com", "w3codebox") > print(s, e) 5 10
Nelle funzioni Lua, possiamo elencare la lista dei valori da restituire dopo il return per restituire più valori, come ad esempio:
function maximum(a) local mi = 1 -- indice del valore massimo local m = a[mi] -- valore massimo 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}))
Il risultato dell'esecuzione del codice sopra è:
23 3
Le funzioni Lua possono accettare un numero variabile di parametri, come nel linguaggio C, usando tre punti ... nella lista dei parametri della funzione per indicare che la funzione accetta parametri variabili.
function add(...) local s = 0 for i, v in ipairs{...} do --> {...} rappresenta un array composto da tutti i parametri variabili s = s + v end return s end print(add(3, 4, 5, 6, 7)) --> 25
Possiamo assegnare i parametri variabili a una variabile.
Ad esempio, possiamo calcolare la media di alcuni numeri:
function average(...) result = 0 local arg={...} --> arg è una tabella, variabile locale for i, v in ipairs(arg) do result = result + v end print("Sono stati passati in totale " .. #arg .. " numeri") return result/#arg end print("Il valore medio è", average(10, 5, 3, 4, 5, 6))
Il risultato dell'esecuzione del codice sopra è:
Sono stati passati in totale 6 numeri Il valore medio è 5.5
Possiamo anche utilizzare select("#",...) per ottenere il numero di parametri variabili:
function average(...) result = 0 local arg={...} for i, v in ipairs(arg) do result = result + v end print("Sono stati passati in totale " .. select("#",...) .. " numeri") return result/select("#",...) end print("Il valore medio è", average(10, 5, 3, 4, 5, 6))
Il risultato dell'esecuzione del codice sopra è:
Sono stati passati in totale 6 numeri Il valore medio è 5.5
A volte potremmo aver bisogno di alcuni parametri fissi più parametri variabili, i parametri fissi devono essere messi prima dei parametri variabili:
function fwrite(fmt, ...) ---> 固定的参数fmt return io.write(string.format(fmt, ...)) end fwrite("w3codebox\n") --->fmt = "w3codebox", 没有变长参数。 fwrite("%d%d\n", 1, 2) --->fmt = "%d%d", 变长参数为 1 和 2
输出结果为:
w3codebox 12
通常在遍历变长参数的时候只需要使用 {…},然而变长参数可能会包含一些 nil,那么就可以用 select 函数来访问变长参数了:select('#', …) 或者 select(n, …)
select('#', …) 返回可变参数的长度。
select(n, …) 用于返回参数列表中的第 n 个参数。
调用 select 时,必须传入一个固定实参 selector(选择开关) 和一系列变长参数。如果 selector 为数字 n,那么 select 返回参数列表中的第 n 个参数,否则只能为字符串 #,这样 select 返回变长参数的总数。
示例代码:
do function foo(...) for i = 1, select('#', ...) do -->获取参数总数 local arg = select(i, ...); -->读取参数 print("arg", arg); end end foo(1, 2, 3, 4); end
输出结果为:
arg 1 arg 2 arg 3 arg 4