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 array mais vous en avez besoin sous forme de valeurs séparées — par exemple, pour passer chaque element comme son propre argument. C'est ce que fait table.unpack : elle renvoie tous les éléments d'un array, étalés.

local scores: {number} = {85, 92, 78}
print(table.unpack(scores))     -- 85  92  78  (une ligne, trois valeurs)
print(math.max(table.unpack(scores))) -- 92 — chaque élément est devenu un argument

L'image miroir est **varargs** : une function qui accepte n'importe quel nombre d'arguments via .... Vous avez déjà vu ... dans Lua — Luau vous permet de le typer (Typed), de sorte que chaque valeur entrante must correspondre :

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 arrivés, et select(i, ...) renvoie les arguments à partir de la position i — utilisé comme une seule valeur dans une expression, cela équivaut à "le i-ème argument".

Les deux fonctionnalités s'assemblent : sum(table.unpack(scores)) étale le array directement into la fonction vararg — la réponse de Luau au modèle de spread-call que vous verriez dans d'autres langages. table.unpack lit le array 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é en utilisant 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 simples.

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