Une fonction d'identité générique
Fait partie de la section Introduction à Luau du Journey Lua de Coddy. Leçon 58 sur 73.
Voici la fonction identité correctement écrite, sous forme de fonction générique :
local function identity<T>(value: T): T
return value
endLe <T> après le nom de la fonction déclare un paramètre de type : un espace réservé qui représente « un certain type, déterminé à chaque appel ». Dans la signature, tu utilises T exactement comme un type réel : le paramètre est un T, et la fonction renvoie un T.
Utiliser le même T pour l’entrée et la sortie est toute l’astuce. Cela les lie ensemble. Appelle identity("hello") et le vérificateur détermine que T = string pour cet appel, donc le résultat est une string. Appelle identity(42) et T = number, donc le résultat est un number. Un seul corps, tous les types, rien n’est perdu.
T n’est qu’un nom conventionnel (abréviation de « Type ») : <Item> ou <Value> conviennent tout aussi bien. Et comme toujours en Luau, les chevrons n’existent que pour le vérificateur : à l’exécution, il s’agit de la simple fonction Lua function identity(value) return value end.
Défi
FacileCrée une fonction générique nommée identity qui :
- déclare un paramètre de type
T - accepte un paramètre nommé
valuede typeT - renvoie cette valeur, avec le type de retour
T
Crée ensuite ces variables typées à l’aide de ta fonction :
luckyNumberde typenumber: appelleidentityavec7greetingde typestring: appelleidentityavec"Hello, Luau!"isReadyde typeboolean: appelleidentityavectrue
Affiche les éléments suivants, chacun sur sa propre ligne :
luckyNumbergreetingisReady- le résultat de l’appel direct de
identityavec"<code>generics" à l’intérieur deprint - le résultat de l’appel direct de
identityavec99à l’intérieur deprint
Essayez vous-même
-- Écrivez le code ici
-- 1) définir identity<T>(value: T): T
-- 2) créer luckyNumber, greeting et isReady avec des appels à identity
-- 3) les afficher, puis afficher identity(le texte exact des instructions) et identity(99)
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