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 booleanCada 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.
Desafio
FácilA 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: chameidentitycom"Luau"count: chameidentitycom12flag: chameidentitycomfalse
Imprima o seguinte, cada item 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éricasPratique por conta própria: Compilador de Lua online