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 diz a identity o que T é — o verificador descobre isso sozinho. Isso é inferência de tipo: em cada ponto de chamada, o Luau olha para 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 booleanCada chamada é independente — T pode ser um string em uma linha e um number na próxima. O resultado inferido é tão seguro quanto uma anotação escrita manualmente: word é um string para o verificador, com autocompletar e verificação de erros completos.
Uma diferença importante do TypeScript: o TS permite forçar o tipo no ponto de chamada com identity<number>(5). O Luau não possui argumentos de tipo no ponto de chamada — essa linha não é uma sintaxe especial, então o Luau lê os parênteses angulares como comparações de menor que/maior que e o código falha. Quando quiser declarar o tipo explicitamente, anote a variável:
local count: number = identity(12)Você pode ver a inferência funcionando com uma ferramenta familiar: typeof retorna o nome do tipo em tempo de execução de um valor, então print(typeof(identity(12))) exibe number — o valor passou pela função genérica completamente inalterado.
Desafio
FácilA função genérica identity da lição anterior já está no seu editor. Coloque a inferência dela para funcionar.
Crie três variáveis, deixando o verificador inferir T (nenhuma anotação necessária):
word— chameidentitycom"Luau"count— chameidentitycom12flag— chameidentitycomfalse
Imprima o seguinte, cada um em sua própria linha:
word- o resultado de
typeof(word) count- o resultado de
typeof(count) flag- 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
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
1Começando com o Luau
O que é Luau?Por que usar Luau?Seu primeiro código em LuauVerificação de tipos e modos de erroRecapitulando: Introdução ao Luau4Trabalhando com Funções
Tipando Parâmetros e Valores de RetornoTipando Funções AnônimasFunções que Não Retornam NadaParâmetros OpcionaisValores Padrão para ParâmetrosFunções VariádicasDefinindo Tipos de FunçõesRecapitulação: Funções Tipadas2Tipos Fundamentais
Tipos Básicos: num, str, boolO Tipo 'any': Escape HatchO Tipo 'unknown'Tipos Nil e OpcionaisInferência de Tipos na PráticaAnotações Explícitas de TiposReciclagem: Prática de Tipos Fundamentais5Aliases, Uniões, Interseções
Aliases de Tipos para PrimitivosTipos de UniãoTrabalhando com Tipos de UniãoTipos LiteraisTipos de InterseçãoCombinando Aliases de TiposRecapitulando: Combinações Avançadas de Tipos3Tabelas Tipadas: Arrays e Maps
Arrays TipadosAdicionando e Lendo ElementosO que é um Tipo Map?Declarando e Acessando MapsIterando Sobre TabelasTabelas de Formato MistoArrays Tipados Multidimensionaistable.unpack e VarargsRecapitulando: Arrays e Maps6Tipando Formatos de Tabelas
Anotações de Formato InlineAliases de Tipo para FormatosPropriedades OpcionaisFormatos vs. Tabelas FlexíveisEstendendo FormatosAdicionando Métodos a FormatosSelf e Métodos com Dois PontosRecapitulação: Definindo Formatos de Tabelas9Generics: Uma Primeira Visão
O Problema que Generics ResolvemUma Função de Identidade GenéricaUsando uma Função GenéricaArrays GenéricosAliases de Tipos GenéricosRecapitulação: Funções Genéricas