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í solo. Esto es la inferencia de tipos: en cada lugar de llamada, Luau analiza el argumento y resuelve 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 una cadena en una línea y un número en la siguiente. El resultado inferido es igual de seguro que una anotación escrita manualmente: para el comprobador, word es un string, con autocompletado completo y comprobación de errores.
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, así que Luau interpreta los corchetes angulares como comparaciones de menor que/mayor que y el código falla. Cuando quieras indicar el tipo explícitamente, anota la variable en su lugar:
local count: number = identity(12)Puedes observar la inferencia en acción con una herramienta conocida: typeof devuelve el nombre del tipo en tiempo de ejecución de un valor, así que print(typeof(identity(12))) imprime number: el valor pasó por la función genérica completamente sin cambios.
Desafío
FácilLa función generic identity de la previous lesson ya está en tu editor. Pon en práctica su inferencia.
Crea tres variables y deja que el comprobador infiera T (no se necesitan anotaciones):
word: llama aidentitycon"Luau"count: llama aidentitycon12flag: llama aidentityconfalse
Imprime lo siguiente, cada elemento 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éricasPractica por tu cuenta: Compilador de Lua online