Una función de identidad genérica
Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 62 de 80.
Aquí está la función identidad bien hecha, como una función genérica:
local function identity<T>(value: T): T
return value
endEl <T> que aparece después del nombre de la función declara un parámetro de tipo: un marcador de posición que representa «algún tipo, decidido en cada llamada». Dentro de la firma, usas T exactamente como un tipo real: el parámetro es de tipo T y la función devuelve un valor de tipo T.
Usar el mismo T para la entrada y la salida es todo el truco. Los vincula. Llama a identity("hello") y el comprobador decide que T = string para esa llamada, así que el resultado es de tipo string. Llama a identity(42) y T = number, así que el resultado es de tipo number. Un solo cuerpo, todos los tipos, sin perder nada.
T es solo un nombre convencional (abreviatura de «Type»): <Item> o <Value> funcionan igual de bien. Y, como siempre en Luau, los corchetes angulares existen solo para el comprobador: en tiempo de ejecución, esta es la función Lua sencilla function identity(value) return value end.
Desafío
FácilEscribe una función que devuelva cualquier valor conservando su tipo.
- Escribe
local function identity<T>(value: T): Tque devuelvavalue. - Declara
local luckyNumber: number = identity(7)ylocal greeting: string = identity("Hello, Luau!"). - Imprime
luckyNumbery despuésgreeting.
Pulsa Run Code: el resultado muestra 7 y Hello, Luau!.
Pruébalo tú mismo
-- 1) identity<T>(value: T): T
-- 2) luckyNumber y greeting a partir de llamadas a identity
-- 3) imprime ambos
Todas las lecciones de Introducción a Luau
1Primeros pasos con Luau
¿Qué es Luau?¿Por qué usar Luau?Tu primer código en LuauComprobación de tipos y modos de errorRecapitulacion: Introducción a Luau4Trabajar con funciones
Tipado de parámetros y valores de retornoTipado de funciones anónimasFunciones que no devuelven nadaParámetros opcionalesValores predeterminados de parámetrosValores predeterminados para booleanosFunciones variádicasDefinir tipos de funcionesRepaso: funciones tipadas7Proyecto: Gestor de tareas tipado
Proyecto: La estructura de una tareaFunción para añadir una tarea2Tipos fundamentales
Número, cadena y booleanoEl tipo 'any': una salida de emergenciaEl tipo 'unknown'Tipos nulos y opcionalesLa inferencia de tipos en acciónAnotaciones de tipo explícitasRepaso: práctica de tipos fundamentales5Alias, Uniones e Intersecciones
Alias de tipos para primitivosTipos de uniónTrabajando con tipos de uniónTipos literalesTipos de intersecciónCombinando alias de tiposResumen: Combinaciones avanzadas de tipos3Tablas tipadas: arrays y mapas
Arrays tipadosAgregar y leer elementos¿Qué es un tipo mapa?Declarar y acceder a mapasRecorrer tablasTablas de formas mixtasLeer una cuadrículaConstruir una cuadrículatable.unpackRepaso: arrays y mapas6Definición de formas de tablas
Anotaciones de forma en líneaAlias de tipos para formasPropiedades opcionalesFormas frente a tablas no estructuradasExtensión de formasAñadir métodos a las formasEl parámetro 'self' y los métodos con dos puntosRecapitulación: Definición de formas de tablas9Genéricos: Una primera mirada
El problema que resuelven los genéricosUna función de identidad genéricaUso de una función genéricaArrays genéricosAlias de tipos genéricosResumen: Funciones genéricasPractica por tu cuenta: Compilador de Luau online