Menu
CoddyTech

Una función de identidad genérica

Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 62 de 80.

Aquí está la función identidad bien hecha, como una función genérica:

local function identity<T>(value: T): T
    return value
end

El <T> que aparece después del nombre de la función declara un parámetro de tipo: un marcador de posición que representa «algún tipo, decidido en cada llamada». Dentro de la firma, usas T exactamente como un tipo real: el parámetro es de tipo T y la función devuelve un valor de tipo T.

Usar el mismo T para la entrada y la salida es todo el truco. Los vincula. Llama a identity("hello") y el comprobador decide que T = string para esa llamada, así que el resultado es de tipo string. Llama a identity(42) y T = number, así que el resultado es de tipo number. Un solo cuerpo, todos los tipos, sin perder nada.

T es solo un nombre convencional (abreviatura de «Type»): <Item> o <Value> funcionan igual de bien. Y, como siempre en Luau, los corchetes angulares existen solo para el comprobador: en tiempo de ejecución, esta es la función Lua sencilla function identity(value) return value end.

challenge icon

Desafío

Fácil

Escribe una función que devuelva cualquier valor conservando su tipo.

  1. Escribe local function identity<T>(value: T): T que devuelva value.
  2. Declara local luckyNumber: number = identity(7) y local greeting: string = identity("Hello, Luau!").
  3. Imprime luckyNumber y después greeting.

Pulsa Run Code: el resultado muestra 7 y Hello, Luau!.

Pruébalo tú mismo

-- 1) identity<T>(value: T): T
-- 2) luckyNumber y greeting a partir de llamadas a identity
-- 3) imprime ambos

Todas las lecciones de Introducción a Luau

Practica por tu cuenta: Compilador de Luau online