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> após o nome da função declara um type parameter — um reservatório de posição que significa "algum tipo, decidido a cada call". Dentro da assinatura você usa T exatamente como um tipo 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 vincula. Faça o call identity("hello") e o verificador decide T = string para essa chamada, de modo que o resultado é um string. Faça o call identity(42) e T = number, então o resultado é um number. One corpo, every tipo, nada perdido.
T é apenas um nome convencional (abreviação de "Type") — <Item> ou <Value> funcionam igualmente bem. E como sempre no 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 da chamada de
identitycom"<code>generics" diretamente dentro deprint - o resultado da chamada de
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(o texto exato das instruções) 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éricasPratique por conta própria: Compilador de Lua online