Menu
Coddy logo textTech

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 boolean

Cada 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.

challenge icon

Desafío

Fácil

La 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 a identity con "Luau"
  • count — llama a identity con 12
  • flag — llama a identity con false

Imprime lo siguiente, cada uno en su propia línea:

  1. word
  2. el resultado de typeof(word)
  3. count
  4. el resultado de typeof(count)
  5. flag
  6. 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
quiz iconPonte a prueba

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