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í 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 boolean

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

challenge icon

Desafío

Fácil

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

Imprime lo siguiente, cada elemento 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

Practica por tu cuenta: Compilador de Lua online