English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
No Lua, as funções são o método principal de abstração de instruções e expressões. Pode ser usado para lidar com alguns trabalhos especiais e calcular alguns valores.
O Lua fornece muitas funções integradas, que podem ser chamadas convenientemente no programa, como a função print() pode imprimir os parâmetros passados no console.
As funções do Lua têm duas principais usos:
1.Concluir a tarefa especificada, neste caso, a função é usada como chamada de instrução;
2.Calcular e retornar valores, neste caso, a função é usada como expressão de atribuição.
O formato de definição de função do linguagem de programação Lua é o seguinte:
optional_function_scope function function_name( argument1, argument2, argument3..., argumenton) function_body return result_params_comma_separated end
Análise:
optional_function_scope: Este parâmetro é opcional para determinar se a função é global ou local, se não for configurado, o valor padrão é função global, se você precisar configurar a função como local, você precisa usar a palavra-chave local.
function_name: Especificar o nome da função.
argument1, argument2, argument3..., argumenton: Parâmetros da função, múltiplos parâmetros são separados por vírgula, a função também pode não ter parâmetros.
function_body: Corpo da função, o bloco de código que a função precisa executar.
result_params_comma_separated: Valor retornado pela função, as funções do Lua podem retornar vários valores, separados por vírgula.
A seguir, um exemplo de definição de função: max(), parâmetro para num1, num2usada para comparar dois valores e retornar o maior:
--[[A função retorna o maior dos dois valores --]] function max(num1, num2) if (num1 > num2) then result = num1; else result = num2; end return result; end -- Chamar função print("O valor máximo de duas comparações é ",max(10,4)) print("O valor máximo de duas comparações é ",max(5,6))
O resultado da execução do código acima é:
O valor máximo de duas comparações é 10 O valor máximo de duas comparações é 6
No Lua, podemos passar funções como parâmetros para outras funções, como no exemplo a seguir:
myprint = function(param) print("É uma função de impressão - ##",param,"##) end function add(num1,num2,functionPrint) result = num1 + num2 -- Chama a função de parâmetro passada functionPrint(result) end myprint(10) -- myprint como parâmetro de função add(2,5,myprint)
O resultado da execução do código acima é:
Esta é a função de impressão - ## 10 ## Esta é a função de impressão - ## 7 ##
As funções Lua podem retornar vários valores, por exemplo string.find, que retorna o "início e o final do match" da sequência de caracteres (se não houver sequência de caracteres correspondente, retorna nil).
> s, e = string.find("pt.oldtoolbag.com", "w3codebox" > print(s, e) 5 10
Em funções Lua, é possível retornar várias valores após o return, por exemplo:
function maximum (a) local mi = 1 -- Índice do maior valor local m = a[mi] -- Maior 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))
O resultado da execução do código acima é:
23 3
As funções Lua podem aceitar um número variável de parâmetros, semelhante ao C, usando três pontos ... no lista de parâmetros da função.
function add(...) local s = 0 for i, v in ipairs{...} do --> {...} representa um array composto por todos os parâmetros variáveis s = s + v end return s end print(add(3,4,5,6,7)) --->25
Podemos atribuir parâmetros variáveis a uma variável.
Por exemplo, calculamos a média de alguns números:
function average(...) result = 0 local arg={...} --> arg é uma tabela, uma variável local for i,v in ipairs(arg) do result = result + v end print("Totalmente introduzido " .. #arg .. " números") return result/#arg end print("Média é",average(10,5,3,4,5,6))
O resultado da execução do código acima é:
totalmente introduzido 6 número Média de 5.5
Também podemos usar select("#",...) para obter o número de parâmetros variáveis:
function average(...) result = 0 local arg={...} for i,v in ipairs(arg) do result = result + v end print("Totalmente introduzido " .. select("#",...) .. " números") return result/select("#",...) end print("Média é",average(10,5,3,4,5,6))
O resultado da execução do código acima é:
totalmente introduzido 6 número Média de 5.5
Às vezes, podemos precisar de alguns parâmetros fixos e parâmetros variáveis, e os parâmetros fixos devem estar antes dos parâmetros variáveis:
function fwrite(fmt, ...) --->Parâmetros Fixos fmt return io.write(string.format(fmt, ...)) end fwrite("w3codebox\n") --->fmt = "w3codebox", sem parâmetros variáveis. fwrite("%d%d\n", 1, 2) --->fmt = "%d%d", os parâmetros variáveis são 1 e 2
O resultado da saída é:
w3codebox 12
Normalmente, quando você navega pelos parâmetros variáveis, você precisa usar {…}, mas os parâmetros variáveis podem conter alguns nil, então você pode usar select função para acessar os parâmetros variáveis:select('#', …) ou select(n, …)
select('#', …) retorna o comprimento dos parâmetros variáveis.
select(n, …) n parâmetro. O select(n, …) é usado para retornar o
Quando você chama select, você deve passar um argumento fixo selector (seletor) e uma série de argumentos variáveis. Se o selector for um número n, então select retorna o n parâmetros, caso contrário, só pode ser uma string #, então o select retorna o número total de parâmetros variáveis.
Código de Exemplo:
do function foo(...) for i = 1, select('#', ...) do -->Obter o Número Total de Parâmetros local arg = select(i, ...); -->Ler Parâmetros print("arg", arg); end end foo(1, 2, 3, 4); end
O resultado da saída é:
arg 1 arg 2 arg 3 arg 4