Les fonctions à nombre d'arguments variables

En Lua, certaines fonctions peuvent recevoir un nombre variable d’arguments, comme c’est le cas de la fonction native print() :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
a = 2
b = 4
c = 6

-- On passe 3 paramètres
print(a, b, c)

-- On passe 1 seul paramètre
print(6)

-- output :
--  2    4    6
--  6

Déclaration de fonctions variadiques

Pour créer une fonction qui accepte un nombre variable d’arguments, on utilise l’opérateur ... :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
function variadic(...)
  print(...)
end

variadic(1, 2, 3)
variadic("a", 2, "b")

-- output :
--  1    2    3
--  a    2    b

Utiliser ... avec d’autres paramètres

⚠️ Attention : ... récupère tous les arguments restants. Il doit donc obligatoirement être placé en dernier dans la liste des paramètres de la fonction.

Voici un exemple :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
function variadic(a, ...)
  print("variable a: " .. a)
  for _, v in ipairs{...} do
    print(v)
  end
end

variadic("b", "c", 2, 6, 4)

-- output :
--  variable a: b
--  c
--  2
--  6
--  4

L’opérateur ... permet donc une grande flexibilité dans la définition de fonctions, mais demande un peu de rigueur dans son utilisation.