Menu
CoddyTech

Uma Função de Identidade Genérica

Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 62 de 80.

Aqui está a função identidade feita do jeito certo, como uma função genérica:

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

O <T> depois do nome da função declara um parâmetro de tipo: um espaço reservado que representa “algum tipo, decidido a cada chamada”. Dentro da assinatura, você usa T exatamente como um tipo real: o parâmetro é um T, e a função retorna um T.

Usar o mesmo T para a entrada e a saída é todo o truque. Isso os vincula. Chame identity("hello") e o verificador determina T = string para essa chamada, então o resultado é uma string. Chame identity(42) e T = number, então o resultado é um number. Um corpo, todos os tipos, nada se perde.

T é apenas um nome convencional (abreviação de “Type”): <Item> ou <Value> funcionam igualmente bem. E, como sempre em Luau, os sinais de menor e maior existem apenas para o verificador: em tempo de execução, esta é a função Lua simples function identity(value) return value end.

challenge icon

Desafio

Fácil

Escreva uma função que retorne qualquer valor mantendo seu tipo intacto.

  1. Escreva local function identity<T>(value: T): T que retorne value.
  2. Declare local luckyNumber: number = identity(7) e local greeting: string = identity("Hello, Luau!").
  3. Imprima luckyNumber e, em seguida, greeting.

Pressione Executar código: a saída mostra 7 e Hello, Luau!.

Experimente você mesmo

-- 1) identity<T>(value: T): T
-- 2) luckyNumber e greeting das chamadas de identity
-- 3) imprima ambos

Todas as lições de Introdução ao Luau

Pratique por conta própria: Compilador de Luau online