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

函数 Lua

En Lua, une fonction est la principale méthode d'abstraction des instructions et des expressions. Elle peut être utilisée pour traiter des tâches spéciales ou pour calculer des valeurs.

Lua fournit de nombreuses fonctions intégrées, que vous pouvez appeler facilement dans votre programme, comme la fonction print() qui peut afficher les paramètres passés sur le contrôle.

Les fonctions Lua ont principalement deux utilisations :

  • 1.Compléter la tâche spécifiée, dans ce cas, la fonction est utilisée comme instruction d'appel ;

  • 2.Calculer et retourner la valeur, dans ce cas, la fonction est utilisée comme expression dans une instruction d'affectation.

Définition de la fonction

Le format de définition des fonctions en langage Lua est le suivant :

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

Analyse :

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

  • function_body: Corps de la fonction, le bloc de instructions à exécuter dans la fonction.

  • result_params_comma_separated: Valeur de retour de la fonction, en Lua, une fonction peut retourner plusieurs valeurs, chaque valeur étant séparée par une virgule.

  • Exemple en ligne

    Les exemples suivants définissent la fonction max(),le paramètre est num1, num2,comparant les deux valeurs et retournant la valeur maximale :

    --[[Retourne la valeur maximale des deux valeurs --]]
    function max(num1, num2)
       if (num1 > num2) then
          result = num1;
       else
          result = num2;
       end
       return result; 
    end
    -- Appel de la fonction
    print("La valeur maximale des deux valeurs comparées est ",max(10,4))}}
    print("La valeur maximale des deux valeurs comparées est ",max(5,6))}}

    以上代码执行结果为:

    La valeur maximale des deux valeurs comparées est     10
    La valeur maximale des deux valeurs comparées est     6

    En Lua, nous pouvons transmettre une fonction en tant que paramètre à une autre fonction, comme dans l'exemple suivant :

    myprint = function(param)
       print("C'est une fonction d'impression -   ##",param,"##)
    end
    function add(num)1,num2,functionPrint)
       result = num1 + num2
       -- Appel de la fonction paramètre passée
       functionPrint(result)
    end
    myprint(10)
    -- myprint est passée en tant que paramètre
    add(2,5,myprint)

    以上代码执行结果为:

    C'est la fonction d'impression -   ##    10    ##
    C'est la fonction d'impression -   ##    7    ##

    Retour multiple de valeurs

    Les fonctions Lua peuvent retourner plusieurs valeurs, par exemple string.find, qui retourne les indices de début et de fin de la chaîne correspondante " (si la chaîne correspondante n'existe pas, retourne nil).

    > s, e = string.find("fr.oldtoolbag.com", "w3codebox" 
    > print(s, e)
    5    10

    Dans les fonctions Lua, après return, vous pouvez lister les valeurs à retourner pour retourner plusieurs valeurs, par exemple :

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

    以上代码执行结果为:

    23    3

    Paramètres variables

    Les fonctions Lua peuvent accepter un nombre variable de paramètres, comme en C, où un point ... est utilisé dans la liste des paramètres de la fonction pour indiquer que la fonction accepte des paramètres variables.

    function add(...)  
    local s = 0  
      for i, v in ipairs{...} do   --> {...} représente un tableau composé de tous les paramètres variables  
        s = s + v  
      end  
      return s  
    end  
    print(add(3,4,5,6,7))}}  --->25

    Nous pouvons assigner des paramètres variables à une variable.

    Par exemple, nous calculons la moyenne de plusieurs nombres :

    function average(...)
       result = 0
       local arg={...}    --> arg est une table, une variable locale
       for i,v in ipairs(arg) do
          result = result + v
       end
       print("Nombre total d'éléments entrés " .. #arg .. " éléments")
       return result/#arg
    end
    print("Moyenne de",average(10,5,3,4,5,6))}}

    以上代码执行结果为:

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

    Nous pouvons également utiliser select("#",...) pour obtenir le nombre de paramètres variables:

    function average(...)
       result = 0
       local arg={...}
       for i,v in ipairs(arg) do
          result = result + v
       end
       print("Nombre total d'éléments entrés " .. select("#",...) .. " éléments")
       return result/select("#",...)
    end
    print("Moyenne de",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