Una función de identidad genérica
Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 58 de 73.
Esta es la función identidad bien hecha, como una función genérica:
local function identity<T>(value: T): T
return value
endEl <T> 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 signatura, usas T exactamente como un tipo real: el parámetro es un T y la función devuelve un 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 T = string para esa llamada, así que el resultado es un string. Llama a identity(42) y T = number, así que el resultado es un number. Un solo cuerpo, todos los tipos, sin perder nada.
T es solo un nombre convencional (abreviatura de «Tipo»): <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 normal function identity(value) return value end.
Desafío
FácilCrea una función genérica llamada identity que:
- declara un parámetro de tipo
T - acepta un parámetro llamado
valuede tipoT - devuelve ese valor, con tipo de retorno
T
Después, crea estas variables tipadas usando tu función:
luckyNumberde tiponumber: llama aidentitycon7greetingde tipostring: llama aidentitycon"Hello, Luau!"isReadyde tipoboolean: llama aidentitycontrue
Imprime lo siguiente, cada elemento en su propia línea:
luckyNumbergreetingisReady- el resultado de llamar a
identitycon"<code>generics" directamente dentro deprint - el resultado de llamar a
identitycon99directamente dentro deprint
Pruébalo tú mismo
-- Escribe código aquí
-- 1) define identity<T>(value: T): T
-- 2) crea luckyNumber, greeting e isReady con llamadas a identity
-- 3) imprímelos, luego imprime identity(el texto exacto de las instrucciones) e identity(99)
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
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 Luau4Trabajando con Funciones
Tipado de Parámetros y Valores de RetornoTipado de Funciones AnónimasFunciones que no Retornan NadaParámetros OpcionalesValores por Defecto en ParámetrosFunciones VariádicasDefinición de Tipos de FuncionesRecapitulaciones: Funciones Tipadas2Tipos principales
Tipos básicos: num, str, boolEl tipo 'any': Vía de escapeEl tipo 'unknown'Tipos nulos y opcionalesInferencia de tipos en acciónAnotaciones explícitas de tiposResumen: Práctica de tipos principales5Alias, 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 Maps
Arrays tipadosAñadir y leer elementos¿Qué es un tipo Map?Declarar y acceder a MapsIterar tablasTablas de forma mixtaArrays tipados multidimensionalestable.unpack y VarargsRecapitulaciones: Arrays y Maps6Definició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 Lua online