Menu
Coddy logo textTech

Usando uma Função Genérica

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

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 resolve 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 que/maior que como comparações, e o código falha. Quando quiser declarar o tipo explicitamente, anote a variável:

local count: number = identity(12)

Você pode observar 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 completamente inalterado pela função genérica.

challenge icon

Desafio

Fácil

A generic identity function da previous lesson já está no seu editor. Coloque sua inferência em prática.

Crie três variáveis, permitindo que o verificador infira T (nenhuma anotação é necessária):

  • word: chame identity com "Luau"
  • count: chame identity com 12
  • flag: chame identity com false

Imprima o seguinte, cada item em sua própria linha:

  1. word
  2. o resultado de typeof(word)
  3. count
  4. o resultado de typeof(count)
  5. flag
  6. o resultado de typeof(flag)

Experimente você mesmo

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

-- Escreva o código aqui
-- 1) crie word, count e flag com chamadas a identity (deixe T ser inferido)
-- 2) imprima cada valor seguido do seu typeof
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

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

Pratique por conta própria: Compilador de Lua online