Lua Funciones
En Lua, las funciones son el método principal para abstraer sentencias y expresiones. Se pueden usar tanto para manejar tareas especiales como para calcular valores.
Lua proporciona muchas funciones integradas que puedes llamar fácilmente en tus programas, como la función print(), que imprime los parámetros pasados en la consola.
Las funciones de Lua tienen principalmente dos usos:
- 1. Realizar la tarea especificada; en este caso, la función se usa como una sentencia de llamada;
- 2. Calcular y devolver valores; en este caso, la función se usa como expresión en una sentencia de asignación.
Definición de funciones
El formato de definición de funciones en el lenguaje de programación Lua es el siguiente:
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn) function_body return result_params_comma_separated end
Explicación:
optional_function_scope:Este parámetro es opcional y especifica si la función es global o local. Si no se establece, por defecto es global. Si necesitas que la función sea local, debes usar la palabra clavelocal。
function_name: Especifica el nombre de la función.
argument1, argument2, argument3..., argumentn: Parámetros de la función; varios parámetros se separan con comas. La función también puede prescindir de parámetros.
function_body: Cuerpo de la función; el bloque de sentencias de código que se ejecutará en la función.
result_params_comma_separated: Valor de retorno de la función; las funciones de Lua pueden devolver múltiples valores, cada valor separado por comas.
Ejemplo
El siguiente ejemplo define la funciónmax(), con parámetros num1, num2, que se utiliza para comparar el tamaño de dos valores y devolver el valor máximo:
Ejemplo
function max(num1, num2)
if (num1 > num2) then
result = num1;
else
result = num2;
end
return result;
end
-- Llamar a la función
print("el máximo de los dos valores es ",max(10,4))
print("el máximo de los dos valores es ",max(5,6))
El resultado de ejecutar el código anterior es:
两值比较最大值为 10 两值比较最大值为 6
En Lua, podemos pasar funciones como parámetros a otras funciones, como en el siguiente ejemplo:
Ejemplo
print("Esta es la función de impresión - ##",param,"##")
end
function add(num1,num2,functionPrint)
result = num1 + num2
-- Llamar al parámetro de función pasado
functionPrint(result)
end
myprint(10)
-- myprint función pasada como parámetro
add(2,5,myprint)
El resultado de ejecutar el código anterior es:
这是打印函数 - ## 10 ## 这是打印函数 - ## 7 ##
Múltiples valores de retorno
Las funciones de Lua pueden devolver múltiples valores de resultado, como string.find, que devuelve los índices de inicio y fin de la cadena coincidente (si no existe una coincidencia, devuelve nil).
> s, e = string.find("www.example.com", "ejemplo")
> print(s, e)
5 10
En las funciones de Lua, puedes devolver múltiples valores simplemente listando los valores a retornar después de return, como:
Ejemplo
local mi = 1 -- Índice del valor máximo
local m = a[mi] -- Valor máximo
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}))
El resultado de ejecutar el código anterior es:
23 3
Parámetros variables
Las funciones de Lua pueden aceptar un número variable de parámetros, similar al lenguaje C; en la lista de parámetros de la función se usan tres puntos... para indicar que la función tiene parámetros variables.
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
Podemos asignar los parámetros variables a una variable.
Por ejemplo, calculemos el promedio de varios números:
Ejemplo
result = 0
local arg={...} --> arg es una tabla, variable local
for i,v in ipairs(arg) do
result = result + v
end
print("En total se pasan " .. #arg .. " números")
return result/#arg
end
print("el promedio es",average(10,5,3,4,5,6))
El resultado de ejecutar el código anterior es:
总共传入 6 个数 平均值为 5.5
También podemos usar select("#",...) para obtener el número de parámetros variables:
Ejemplo
result = 0
local arg={...}
for i,v in ipairs(arg) do
result = result + v
end
print("En total se pasan " .. select("#",...) .. " números")
return result/select("#",...)
end
print("el promedio es",average(10,5,3,4,5,6))
El resultado de ejecutar el código anterior es:
总共传入 6 个数 平均值为 5.5
A veces podemos necesitar algunos parámetros fijos además de los parámetros variables; los parámetros fijos deben colocarse antes de los parámetros variables:
Ejemplo
return io.write(string.format(fmt, ...))
end
fwrite("ejemplo\n") --->fmt = "ejemplo", no hay parámetros variables.
fwrite("%d%d\n", 1, 2) --->fmt = "%d%d", los parámetros variables son 1 y 2
El resultado de salida es:
ejemplo 12
Normalmente, para iterar sobre los parámetros variables, solo se necesita usar{…}, sin embargo, los parámetros variables pueden contener algunosnil, entonces se puede usarselectla función para acceder a los parámetros variables:select('#', …)oselect(n, …)
- select('#', …)Devuelve la longitud de los parámetros variables.
- select(n, …)Se utiliza para devolver, desde el inicio,ntoda la lista de parámetros hasta la posición final.
Al llamar a select, se debe pasar un argumento fijo selector (interruptor de selección) y una serie de parámetros variables. Si selector es el número n, entonces select devuelve, en la lista de parámetros, desde el índicenhasta la posición final, toda la lista de parámetros; de lo contrario, solo puede ser la cadena#, de esta manera select devuelve el número total de parámetros variables.
Ejemplo
a = select(3,...) --> A partir de la tercera posición, la variable a corresponde al primer parámetro de la lista de variables de la derecha
print (a)
print (select(3,...)) --> Imprimir todos los parámetros de la lista
end
f(0,1,2,3,4,5)
El resultado de salida es:
2 2 3 4 5
Ejemplo
function foo(...)
for i = 1, select('#', ...) do --> Obtener el total de parámetros
local arg = select(i, ...); --> Leer el parámetro; arg corresponde al primer parámetro de la lista de variables de la derecha
print("arg", arg);
end
end
foo(1, 2, 3, 4);
end
El resultado de salida es:
arg 1 arg 2 arg 3 arg 4Otras extensiones