Uma Função de Identidade Genérica
Parte da seção Introdução ao Luau do Journey de Lua da Coddy — lição 58 de 73.
Aqui está a função identity feita da maneira certa — como uma generic function:
local function identity<T>(value: T): T
return value
endO <T> depois do nome da função declara um type parameter — um marcador de posição que representa "algum type, decidido em cada call". Dentro da assinatura você usa T exatamente como um type real: o parâmetro é um T, e a função retorna um T.
Usar o mesmo T para entrada e saída é todo o truque — isso os conecta. Chame identity("hello") e o verificador decide T = string para essa call, então o result é um string. Chame identity(42) e T = number, então o result é um number. Um corpo, every type, nada perdido.
T é apenas um nome convencional (abreviação de "Type") — <Item> ou <Value> funcionam tão bem quanto. E como sempre em Luau, os colchetes angulares existem apenas para o verificador: em tempo de execução, esta é a função Lua simples function identity(value) return value end.
Desafio
FácilCrie uma função genérica chamada identity que:
- declare um parâmetro de tipo
T - aceite um parâmetro chamado
valuedo tipoT - retorne esse valor, com o tipo de retorno
T
Em seguida, crie estas variáveis tipadas usando sua função:
luckyNumberdo tiponumber— chameidentitycom7greetingdo tipostring— chameidentitycom"Hello, Luau!"isReadydo tipoboolean— chameidentitycomtrue
Imprima o seguinte, cada um em sua própria linha:
luckyNumbergreetingisReady- o resultado de chamar
identitycom"generics"diretamente dentro deprint - o resultado de chamar
identitycom99diretamente dentro deprint
Experimente você mesmo
-- Escreva o código aqui
-- 1) defina identity<T>(value: T): T
-- 2) crie luckyNumber, greeting e isReady com chamadas a identity
-- 3) imprima-os, depois imprima identity("generics") e identity(99)
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