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 argumentL'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
endselect("#", ...) 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.
Défi
FacileCréez un tableau typé scores: {number} avec 85, 92 et 78.
- Affichez tous les scores sur une seule ligne à l'aide de
table.unpack. - Affichez le score le plus élevé en utilisant
math.maxettable.unpack. - Définissez
local function sum(...: number): numberqui additionne tous ses arguments à l'aide deselect("#", ...)etselect(i, ...), puis affichezsum(table.unpack(scores)). - 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)
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
1Premiers pas avec Luau
Qu'est-ce que Luau ?Pourquoi utiliser Luau ?Votre premier code LuauVérification de type et modes d'erreurRécapitulatif : Introduction à Luau4Travailler avec les fonctions
Typage des paramètres et valeurs de retourTypage des fonctions anonymesFonctions ne retournant rienParamètres optionnelsValeurs par défaut des paramètresFonctions variadiquesDéfinition des types de fonctionsRécapitulatif : Fonctions typées2Types fondamentaux
Types de base : num, str, boolLe type 'any' : la porte de sortieLe type 'unknown'Types Nil et optionnelsL'inférence de type en actionAnnotations explicites de typeRécapitulatif : Pratique des types fondamentaux5Alias, unions et intersections
Alias de types pour les types primitifsTypes unionsTravailler avec les types unionsTypes littérauxTypes intersectionsCombinaison d'alias de typesRécapitulatif : Combinaisons de types avancées3Tables typées : Tableaux et Maps
Tableaux typésAjout et lecture d'élémentsQu'est-ce qu'un type Map ?Déclaration et accès aux MapsItération sur les tablesTables à formes mixtesTableaux typés multidimensionnelstable.unpack et VarargsRécapitulatif : Tableaux et Maps