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 argumentL'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
endselect("#", ...) 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.
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é à l’aide de
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 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)
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 MapsEntraînez-vous par vous-même : Compilateur Lua en ligne