English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Funções do Lua

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.

Definição de funçã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.

  • Exemplo online

    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    ##

    Múltiplos retornos

    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

    Parâmetros variáveis

    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