Utiliser une fonction générique
Fait partie de la section Introduction à Luau du Journey Lua de Coddy. Leçon 59 sur 73.
Tu n’indiques jamais à identity ce qu’est T : le vérificateur le déduit de lui-même. C’est l’inférence de type : à chaque site d’appel, Luau examine l’argument et résout 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 manuellement : pour le vérificateur, word est une string, avec la complétion automatique et la vérification des erreurs.
Une différence importante avec TypeScript : TS te permet de forcer le type sur le site d’appel avec identity<number>(5). Luau n’a pas d’arguments de type sur le site d’appel. Cette ligne n’est pas une syntaxe spéciale, donc Luau interprète les chevrons comme des comparaisons inférieur à/supérieur à et le code échoue. Lorsque tu veux indiquer 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
FacileLa fonction générique identity de la leçon précédente se trouve déjà dans votre éditeur. Mettez son inférence à profit.
Créez trois variables en laissant le vérificateur déduire T (aucune annotation nécessaire) :
word: appelezidentityavec"Luau"count: appelezidentityavec12flag: appelezidentityavecfalse
Affichez les éléments suivants, chacun sur sa propre ligne :
word- le résultat de
typeof(word) count- le résultat de
typeof(count) flag- le résultat de
typeof(flag)
Essayez vous-même
-- La fonction d'identité générique de la leçon précédente
local function identity<T>(value: T): T
return value
end
-- Écrivez le code ici
-- 1) créez word, count et flag avec des appels à identity (laissez T être inféré)
-- 2) affichez chaque valeur suivie de son typeof
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 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 Lua en ligne