Fonctions Lua

En Lua, les fonctions sont la principale méthode pour abstraire des instructions et des expressions. Elles peuvent être utilisées à la fois pour traiter des tâches spécifiques et pour calculer des valeurs.

Lua fournit de nombreuses fonctions intégrées que vous pouvez appeler facilement dans vos programmes. Par exemple, la fonction print() affiche les paramètres passés dans la console.

Les fonctions Lua ont principalement deux utilisations :

  • 1. Accomplir des tâches spécifiées ; dans ce cas, la fonction est utilisée comme une instruction d'appel ;
  • 2. Calculer et renvoyer des valeurs ; dans ce cas, la fonction est utilisée comme une expression dans une instruction d'affectation.

Définition de fonction

Le format de définition de fonction dans le langage de programmation Lua est le suivant :

optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
    function_body
    return result_params_comma_separated
end

Explication :

  • optional_function_scope:Ce paramètre est facultatif et spécifie si la fonction est globale ou locale. Si ce paramètre n'est pas défini, la fonction est globale par défaut. Si vous devez définir la fonction comme 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. La fonction peut également ne pas avoir de paramètres.

  • function_body: Corps de la fonction : le bloc d'instructions de code qui doivent être exécutées dans la fonction.

  • result_params_comma_separated: Valeurs de retour de la fonction. Les fonctions Lua peuvent renvoyer plusieurs valeurs, chacune séparée par des virgules.

  • Exemple

    L'exemple suivant définit la fonctionmax(), avec les paramètres num1, num2, utilisés pour comparer les deux valeurs et renvoyer la valeur maximale :

    Exemple

    --[[ La fonction renvoie le maximum de deux valeurs --]]
    function max(num1, num2)

       if (num1 > num2) then
          result = num1;
       else
          result = num2;
       end

       return result;
    end
    -- Appeler la fonction
    print("Le maximum des deux valeurs est ",max(10,4))
    print("Le maximum des deux valeurs est ",max(5,6))

    La sortie du code ci-dessus est :

    两值比较最大值为     10
    两值比较最大值为     6
    

    En Lua, nous pouvons passer des fonctions comme arguments à d'autres fonctions, comme dans l'exemple suivant :

    Exemple

    myprint = function(param)
       print("Ceci est la fonction print - ##",param,"##")
    end

    function add(num1,num2,functionPrint)
       result = num1 + num2
       -- Appeler le paramètre de fonction transmis
       functionPrint(result)
    end
    myprint(10)
    -- la fonction myprint est passée en argument
    add(2,5,myprint)

    La sortie du code ci-dessus est :

    这是打印函数 -   ##    10    ##
    这是打印函数 -   ##    7    ##
    

    Valeurs de retour multiples

    Les fonctions Lua peuvent renvoyer plusieurs valeurs de résultat, comme string.find, qui renvoie les "indices de début et de fin" de la chaîne correspondante (ou nil si aucune correspondance n'est trouvée).

    > s, e = string.find("www.example.com", "example") 
    > print(s, e)
    5    10
    

    Dans les fonctions Lua, listez les valeurs à renvoyer après return pour renvoyer plusieurs valeurs, par exemple :

    Exemple

    function maximum (a)
        local mi = 1             -- Indice 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}))

    La sortie du code ci-dessus est :

    23    3
    

    Arguments variables

    Les fonctions Lua peuvent accepter un nombre variable de paramètres. Comme en C, utilisez trois points dans la liste des paramètres de la fonction... pour indiquer que la fonction a des paramètres 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

    Nous pouvons affecter les arguments variables à une variable.

    Par exemple, calculons la moyenne de plusieurs nombres :

    Exemple

    function average(...)
       result = 0
       local arg={...}    --> arg est une table, variable locale
       for i,v in ipairs(arg) do
          result = result + v
       end
       print("Nombre total de " .. #arg .. " nombres")
       return result/#arg
    end

    print("La moyenne est",average(10,5,3,4,5,6))

    La sortie du code ci-dessus est :

    总共传入 6 个数
    平均值为    5.5
    

    Nous pouvons aussi utiliser select("#",...) pour obtenir le nombre d'arguments variables :

    Exemple

    function average(...)
       result = 0
       local arg={...}
       for i,v in ipairs(arg) do
          result = result + v
       end
       print("Nombre total de " .. select("#",...) .. " nombres")
       return result/select("#",...)
    end

    print("La moyenne est",average(10,5,3,4,5,6))

    La sortie du code ci-dessus est :

    总共传入 6 个数
    平均值为    5.5
    

    Parfois, nous pouvons avoir besoin de quelques paramètres fixes en plus des arguments variables. Les paramètres fixes doivent être placés avant les arguments variables :

    Exemple

    function fwrite(fmt, ...)  ---> Paramètre fixe fmt
        return io.write(string.format(fmt, ...))    
    end

    fwrite("example\n")       ---> fmt = "example", aucun argument variable.
    fwrite("%d%d\n", 1, 2)   ---> fmt = "%d%d", les arguments variables sont 1 et 2

    La sortie est :

    example
    12
    

    Habituellement, lors de l'itération sur des arguments variables, vous n'avez besoin d'utiliser que{…}, cependant, les arguments variables peuvent contenir certainsnil, alors vous pouvez utiliser la fonctionselectpour accéder aux arguments variables :select('#', …)ouselect(n, …)

    • select('#', …)Renvoie la longueur des arguments variables.
    • select(n, …)Utilisé pour renvoyer à partir de la position de départnla liste de tous les arguments depuis la position de départ jusqu'à la position finale.

    Lors de l'appel à select, vous devez passer un sélecteur d'argument effectif fixe (commutateur de sélection) et une série d'arguments variables. Si le sélecteur est le nombre n, alors select renvoie la liste d'arguments à partir de l'indexnjusqu'à la position finale, toutes les listes d'arguments ; sinon il ne peut être que la chaîne#, auquel cas select renvoie le nombre total d'arguments variables.

    Exemple

    fonction f(...)
        a = select(3,...)  --> À partir de la troisième position, la variable a correspond au premier paramètre de la liste de variables à droite
        print (a)
        print (select(3,...)) --> Afficher tous les paramètres de la liste
    end

    f(0,1,2,3,4,5)

    La sortie est :

    2
    2       3       4       5

    Exemple

    do  
        function foo(...)  
            for i = 1, select('#', ...) do  --> Obtenir le nombre total de paramètres
                local arg = select(i, ...); --> Lire les paramètres ; arg correspond au premier paramètre de la liste de variables à droite
                print("arg", arg);  
            end  
        end  
     
        foo(1, 2, 3, 4);  
    end

    La sortie est :

    arg    1
    arg    2
    arg    3
    arg    4
    
    Autres extensions