Menu
CoddyTech

Usando uma Função Genérica

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

Você nunca informa a identity o que é T: o verificador descobre isso por conta própria. Isso é inferência de tipos: em cada ponto de chamada, Luau analisa o argumento e determina 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 chamada é independente: T pode ser uma string em uma linha e um número na seguinte. O resultado inferido é tão seguro quanto uma anotação escrita manualmente: para o verificador, word é uma string, com preenchimento automático completo e verificação de erros.

Uma diferença importante em relação ao TypeScript: o TS permite forçar o tipo no ponto de chamada com identity<number>(5). Luau não tem argumentos de tipo no ponto de chamada. Essa linha não é uma sintaxe especial, então Luau interpreta os sinais de menor e maior como operadores de comparação e o código falha. Quando quiser especificar o tipo explicitamente, anote a variável em vez disso:

local count: number = identity(12)

Você pode ver a inferência em ação com uma ferramenta conhecida: typeof retorna o nome do tipo de tempo de execução de um valor, então print(typeof(identity(12))) imprime number: o valor passou pela função genérica completamente inalterado.

challenge icon

Desafio

Fácil

Deixe o verificador determinar T em cada chamada.

  1. Abaixo da função, armazene identity("Oslo") em local city e identity(42) em local floors, sem anotações.
  2. Imprima typeof(city) e, em seguida, typeof(floors).

Pressione Executar código: a saída mostra string e number.

Experimente você mesmo

-- A função genérica identity da aula anterior
local function identity<T>(value: T): T
    return value
end

-- 1) city e floors obtidos de chamadas a identity, sem anotações
-- 2) imprima o typeof de cada um

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

Pratique por conta própria: Compilador de Luau online