Utiliser une fonction générique
Fait partie de la section Introduction à Luau du Journey Lua de Coddy. Leçon 63 sur 80.
Tu n’indiques jamais à identity ce qu’est T : le vérificateur le détermine lui-même. C’est l’inférence de types : à chaque appel, Luau examine l’argument et détermine T :
local word = identity("Luau") -- T inféré comme string
local count = identity(12) -- T inféré comme number
local flag = identity(false) -- T inféré comme booleanChaque appel est indépendant : T peut être une chaîne sur une ligne et un nombre sur la suivante. Le résultat inféré est tout aussi sûr qu’une annotation écrite à la main : pour le vérificateur, word est une string, avec la complétion automatique complète et la vérification des erreurs.
Une différence importante par rapport à TypeScript : TS te permet de forcer le type au site d’appel avec identity<number>(5). Luau n’a pas d’arguments de type au site d’appel. Cette ligne n’est pas une syntaxe spéciale, alors Luau interprète les chevrons comme des opérateurs inférieur à/supérieur à, et le code échoue. Lorsque tu veux préciser explicitement le type, annote plutôt la variable :
local count: number = identity(12)Tu peux observer l’inférence à l’œuvre avec un outil familier : typeof renvoie le nom du type à l’exécution d’une valeur, donc print(typeof(identity(12))) affiche number : la valeur a traversé la fonction générique sans aucune modification.
Défi
FacileLaisse le vérificateur déterminer T à chaque appel.
- Sous la fonction, stocke
identity("Oslo")danslocal cityetidentity(42)danslocal floors, sans annotations. - Affiche
typeof(city), puistypeof(floors).
Appuie sur Run Code : le résultat affiche string et number.
Essayez vous-même
-- La fonction identité générique de la leçon précédente
local function identity<T>(value: T): T
return value
end
-- 1) city et floors obtenus par des appels à identity, sans annotations
-- 2) afficher le typeof de chacun
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
Typer les paramètres et les valeurs de retourTyper les fonctions anonymesFonctions sans valeur de retourParamètres optionnelsValeurs par défaut des paramètresValeurs par défaut pour les booléensFonctions variadiquesDéfinir des types de fonctionsRécapitulatif : fonctions typées7Projet : gestionnaire de tâches typé
Projet : la structure d’une tâcheFonction pour ajouter une tâche2Types fondamentaux
Nombre, chaîne de caractères et booléenLe type « any » : une échappatoireLe type « unknown »Types nil et optionnelsL’inférence de types en actionAnnotations de type explicitesRécapitulatif : exercices sur les 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ésAjouter et lire des élémentsQu’est-ce qu’un type Map ?Déclarer et accéder aux mapsParcourir les tablesTables de formes mixtesLire une grilleConstruire une grilletable.unpackRécapitulatif : tableaux et maps6Typage des structures de tables
Annotations de structures en ligneAlias de types pour les structuresPropriétés optionnellesStructures vs tables libresExtension de structuresAjout de méthodes aux structuresMéthodes avec Self et deux-pointsRécapitulatif : Définir des structures de tables9Les génériques : Un premier aperçu
Le problème résolu par les génériquesUne fonction d'identité génériqueUtiliser une fonction génériqueLes tableaux génériquesLes alias de types génériquesRécapitulatif : Les fonctions génériquesEntraînez-vous par vous-même : Compilateur Luau en ligne