Menu
Coddy logo textTech

table.unpack et Varargs

Fait partie de la section Introduction à Luau du Journey Lua de Coddy. Leçon 20 sur 73.

Parfois, vous avez des valeurs dans un tableau, mais vous en avez besoin comme valeurs séparées : par exemple, pour transmettre chaque élément comme son propre argument. C'est table.unpack : il renvoie tous les éléments d'un tableau, répartis.

local scores: {number} = {85, 92, 78}
print(table.unpack(scores))     -- 85  92  78  (one line, three values)
print(math.max(table.unpack(scores))) -- 92 — chaque élément est devenu un argument

L'image miroir est celle des arguments variables : une fonction qui accepte un nombre quelconque d'arguments via .... Vous avez déjà vu ... en Lua : Luau vous permet de le typer, afin que chaque valeur reçue corresponde au type attendu :

local function sum(...: number): number
    local total = 0
    for i = 1, select("#", ...) do
        total += select(i, ...)
    end
    return total
end

select("#", ...) renvoie le nombre d'arguments reçus, et select(i, ...) renvoie les arguments à partir de la position i : utilisé comme une valeur unique dans une expression, cela correspond effectivement au « ie argument ».

Les deux fonctionnalités s'imbriquent : sum(table.unpack(scores)) répartit directement le tableau dans la fonction à arguments variables : la réponse de Luau au modèle d'appel avec répartition que vous trouveriez dans d'autres langages. table.unpack lit le tableau sans le modifier.

challenge icon

Défi

Facile

Créez un tableau typé scores: {number} avec 85, 92 et 78.

  1. Affichez tous les scores sur une seule ligne à l’aide de table.unpack.
  2. Affichez le score le plus élevé à l’aide de math.max et table.unpack.
  3. Définissez local function sum(...: number): number qui additionne tous ses arguments à l’aide de select("#", ...) et select(i, ...), puis affichez sum(table.unpack(scores)).
  4. Affichez sum(10, 20) pour montrer que la même fonction fonctionne avec des arguments ordinaires.

Essayez vous-même

-- Écrivez le code ici
-- 1) déclarer scores : {number} = {85, 92, 78}
-- 2) print(table.unpack(scores)) et le math.max des scores dépaquetés
-- 3) définir sum(...: number): number avec select, print sum(table.unpack(scores))
-- 4) print sum(10, 20)
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Introduction à Luau

Entraînez-vous par vous-même : Compilateur Lua en ligne