Uso de una función genérica
Parte de la sección Introducción a Luau del Journey de Lua de Coddy — lección 59 de 73.
Nunca le dices a identity qué es T; el comprobador lo deduce por sí mismo. Esto es la inferencia de tipos: en cada lugar de llamada, Luau examina el argumento y resuelve para T:
local word = identity("Luau") -- T inferido como string
local count = identity(12) -- T inferido como number
local flag = identity(false) -- T inferido como booleanCada llamada es independiente: T puede ser un string en una línea y un number en la siguiente. El resultado inferido es tan seguro como una anotación escrita a mano: word es un string para el comprobador, con autocompletado y comprobación de errores completos.
Una diferencia importante con TypeScript: TS te permite forzar el tipo en el lugar de llamada con identity<number>(5). Luau no tiene argumentos de tipo en el lugar de llamada; esa línea no es una sintaxis especial, por lo que Luau lee los corchetes angulares como comparaciones de menor que/mayor que y el código falla. Cuando quieras especificar el tipo explícitamente, anota la variable en su lugar:
local count: number = identity(12)Puedes ver la inferencia en funcionamiento con una herramienta familiar: typeof devuelve el nombre del tipo en tiempo de ejecución de un valor, por lo que print(typeof(identity(12))) imprime number; el valor pasó a través de la función genérica completamente sin cambios.
Desafío
FácilLa función genérica identity de la lección anterior ya está en tu editor. Pon a trabajar su inferencia.
Crea tres variables, dejando que el comprobador infiera T (no se necesitan anotaciones):
word— llama aidentitycon"Luau"count— llama aidentitycon12flag— llama aidentityconfalse
Imprime lo siguiente, cada uno en su propia línea:
word- el resultado de
typeof(word) count- el resultado de
typeof(count) flag- el resultado de
typeof(flag)
Pruébalo tú mismo
-- La función de identidad genérica de la lección anterior
local function identity<T>(value: T): T
return value
end
-- Escribe código aquí
-- 1) crea word, count y flag con llamadas a identity (deja que T se infiera)
-- 2) imprime cada valor seguido de su typeof
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éricas