English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
En Lua, las funciones son el método principal para abstraer instrucciones y expresiones. Puede utilizarse para manejar ciertos trabajos o calcular ciertos valores.
Lua proporciona muchas funciones integradas, que puede llamar fácilmente en su programa, como la función print() que puede imprimir los parámetros introducidos en la consola.
Las funciones en Lua tienen dos usos principales:
1.Completar una tarea específica, en este caso, la función se utiliza como una declaración de llamada;
2.Calcular y devolver un valor, en este caso, la función se utiliza como expresión en una declaración de asignación.
El formato de definición de funciones en el lenguaje de programación Lua es el siguiente:
optional_function_scope función function_name( argumento1, argumento2, argumento3..., argumenton) function_body devolver result_params_comma_separated end
Análisis:
optional_function_scope: Este parámetro es opcional para determinar si la función es una función global o local, si no se configura este parámetro, se considera una función global por defecto. Si necesita configurar la función como una función local, debe usar la palabra clave local.
function_name: Especificar el nombre de la función.
argumento1, argumento2, argumento3..., argumenton: Parámetros de la función, varios parámetros separados por comas, la función también puede no tener parámetros.
function_body: Cuerpo de la función, el bloque de instrucciones que se debe ejecutar en la función.
result_params_comma_separated: Valor devuelto por la función, en Lua, las funciones pueden devolver varios valores, separados por comas.
A continuación se muestra un ejemplo de cómo definir una función: max(), parámetro para num1, num2,se utiliza para comparar dos valores y devolver el mayor:
--[[La función devuelve el valor máximo de dos valores --]] función max(num1, num2) si (num1 > num2) entonces result = num1; else result = num2; end devolver result; end -- llamar a la función imprimir("El valor máximo de dos comparaciones es ",max(10,4))}} imprimir("El valor máximo de dos comparaciones es ",max(5,6))}}
以上代码执行结果为:
El valor máximo de dos comparaciones es 10 El valor máximo de dos comparaciones es 6
En Lua, podemos pasar funciones como parámetros a otras funciones, como en el siguiente ejemplo:
myprint = función(param) imprimir("Esto es una función de impresión - ##",param,"##) end function add(num1,num2,functionPrint) result = num1 + num2 -- Llamar a la función de parámetro pasada functionPrint(result) end myprint(10) -- myprint se pasa como parámetro add(2,5,myprint)
以上代码执行结果为:
Esta es la función de impresión - ## 10 ## Esta es la función de impresión - ## 7 ##
Las funciones Lua pueden devolver múltiples valores, por ejemplo string.find, que devuelve la secuencia de caracteres coincidente "inicio y final de la coincidencia" (si no hay secuencia de caracteres coincidente devuelve nil).
> s, e = string.find("es.oldtoolbag.com", "w3codebox") > print(s, e) 5 10
En las funciones Lua, se puede listar la lista de valores a devolver después de return para devolver múltiples valores, como:
function maximum (a) local mi = 1 -- Índice del máximo valor local m = a[mi] -- Máximo valor 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
Las funciones Lua pueden aceptar un número variable de argumentos, al igual que el lenguaje C, se utiliza tres puntos ... en la lista de argumentos de la función para indicar que la función tiene argumentos variables.
function add(...) local s = 0 for i, v in ipairs{...} do --> {...} representa un array compuesto por todos los parámetros variables s = s + v end return s end print(add(3,4,5,6,7))}} --->25
Podemos asignar parámetros variables a una variable.
Por ejemplo, calculamos el promedio de varios números:
function average(...) result = 0 local arg={...} --> arg es una tabla, variable local for i,v in ipairs(arg) do result = result + v end print("El número total de valores ingresados es " .. #arg .. " cantidad") return result/#arg end print("El valor promedio es",average(10,5,3,4,5,6))}}
以上代码执行结果为:
总共传入 6 个数 平均值为 5.5
También podemos obtener el número de parámetros variables utilizando select("#",...):
function average(...) result = 0 local arg={...} for i,v in ipairs(arg) do result = result + v end print("El número total de valores ingresados es " .. select("#",...) .. " cantidad") return result/select("#",...) end print("El valor promedio es",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