English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
En Lua, une fonction est la principale méthode d'abstraction des instructions et des expressions. Elle peut être utilisée pour traiter des tâches spéciales ou pour calculer des valeurs.
Lua fournit de nombreuses fonctions intégrées, que vous pouvez appeler facilement dans votre programme, comme la fonction print() qui peut afficher les paramètres passés sur le contrôle.
Les fonctions Lua ont principalement deux utilisations :
1.Compléter la tâche spécifiée, dans ce cas, la fonction est utilisée comme instruction d'appel ;
2.Calculer et retourner la valeur, dans ce cas, la fonction est utilisée comme expression dans une instruction d'affectation.
Le format de définition des fonctions en langage Lua est le suivant :
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn) function_body return result_params_comma_separated end
Analyse :
optional_function_scope: Ce paramètre est optionnel pour définir si la fonction est une fonction globale ou locale, par défaut, si ce paramètre n'est pas défini, la fonction est globale. Si vous devez définir une fonction locale, utilisez le mot-clé local.
function_name: Spécifiez le nom de la fonction.
argument1, argument2, argument3..., argumentn: Paramètres de la fonction, plusieurs paramètres sont séparés par des virgules, et une fonction peut également ne pas avoir de paramètres.
function_body: Corps de la fonction, le bloc de instructions à exécuter dans la fonction.
result_params_comma_separated: Valeur de retour de la fonction, en Lua, une fonction peut retourner plusieurs valeurs, chaque valeur étant séparée par une virgule.
Les exemples suivants définissent la fonction max(),le paramètre est num1, num2,comparant les deux valeurs et retournant la valeur maximale :
--[[Retourne la valeur maximale des deux valeurs --]] function max(num1, num2) if (num1 > num2) then result = num1; else result = num2; end return result; end -- Appel de la fonction print("La valeur maximale des deux valeurs comparées est ",max(10,4))}} print("La valeur maximale des deux valeurs comparées est ",max(5,6))}}
以上代码执行结果为:
La valeur maximale des deux valeurs comparées est 10 La valeur maximale des deux valeurs comparées est 6
En Lua, nous pouvons transmettre une fonction en tant que paramètre à une autre fonction, comme dans l'exemple suivant :
myprint = function(param) print("C'est une fonction d'impression - ##",param,"##) end function add(num)1,num2,functionPrint) result = num1 + num2 -- Appel de la fonction paramètre passée functionPrint(result) end myprint(10) -- myprint est passée en tant que paramètre add(2,5,myprint)
以上代码执行结果为:
C'est la fonction d'impression - ## 10 ## C'est la fonction d'impression - ## 7 ##
Les fonctions Lua peuvent retourner plusieurs valeurs, par exemple string.find, qui retourne les indices de début et de fin de la chaîne correspondante " (si la chaîne correspondante n'existe pas, retourne nil).
> s, e = string.find("fr.oldtoolbag.com", "w3codebox" > print(s, e) 5 10
Dans les fonctions Lua, après return, vous pouvez lister les valeurs à retourner pour retourner plusieurs valeurs, par exemple :
function maximum (a) local mi = 1 -- Index de la valeur maximale local m = a[mi] -- Valeur maximale 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))
以上代码执行结果为:
23 3
Les fonctions Lua peuvent accepter un nombre variable de paramètres, comme en C, où un point ... est utilisé dans la liste des paramètres de la fonction pour indiquer que la fonction accepte des paramètres variables.
function add(...) local s = 0 for i, v in ipairs{...} do --> {...} représente un tableau composé de tous les paramètres variables s = s + v end return s end print(add(3,4,5,6,7))}} --->25
Nous pouvons assigner des paramètres variables à une variable.
Par exemple, nous calculons la moyenne de plusieurs nombres :
function average(...) result = 0 local arg={...} --> arg est une table, une variable locale for i,v in ipairs(arg) do result = result + v end print("Nombre total d'éléments entrés " .. #arg .. " éléments") return result/#arg end print("Moyenne de",average(10,5,3,4,5,6))}}
以上代码执行结果为:
总共传入 6 个数 平均值为 5.5
Nous pouvons également utiliser select("#",...) pour obtenir le nombre de paramètres variables:
function average(...) result = 0 local arg={...} for i,v in ipairs(arg) do result = result + v end print("Nombre total d'éléments entrés " .. select("#",...) .. " éléments") return result/select("#",...) end print("Moyenne de",average(10,5,3,4,5,6))}}
以上代码执行结果为:
总共传入 6 个数 平均值为 5.5
有时候我们可能需要几个固定参数加上可变参数,固定参数必须放在变长参数之前:
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