Uso de una función genérica
Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 63 de 80.
Nunca le dices a identity qué es T: el comprobador lo averigua por sí solo. Esto es inferencia de tipos: en cada punto de llamada, Luau examina el argumento y resuelve T:
local word = identity("Luau") -- T se infiere como string
local count = identity(12) -- T se infiere como number
local flag = identity(false) -- T se infiere 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 a mano: para el comprobador, word es una string, con autocompletado completo y comprobación de errores.
Una diferencia importante con TypeScript: TS te permite forzar el tipo en el punto de llamada con identity<number>(5). Luau no tiene argumentos de tipo en el punto de llamada. Esa línea no es una sintaxis especial, así que Luau interpreta los signos angulares como comparaciones de menor que y mayor que, y el código falla. Cuando quieras especificar el tipo explícitamente, anota la variable:
local count: number = identity(12)Puedes observar la inferencia en acción con una herramienta conocida: typeof devuelve el nombre del tipo de un valor en tiempo de ejecución, así que print(typeof(identity(12))) imprime number: el valor pasó por la función genérica completamente sin cambios.
Desafío
FácilDeja que el comprobador determine T en cada llamada.
- Debajo de la función, almacena
identity("Oslo")enlocal cityyidentity(42)enlocal floors, sin anotaciones. - Imprime
typeof(city)y despuéstypeof(floors).
Pulsa Ejecutar código: la salida muestra string y number.
Pruébalo tú mismo
-- La función genérica identity de la lección anterior
local function identity<T>(value: T): T
return value
end
-- 1) city y floors a partir de llamadas a identity, sin anotaciones
-- 2) imprime typeof de cada uno
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