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 identidade feita corretamente, como uma função genérica:
local function identity<T>(value: T): T
return value
endO <T> após o nome da função declara um parâmetro de tipo: um espaço reservado que representa "algum tipo, decidido a cada chamada". 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 T mesmo para a entrada e a saída é todo o truque. Isso vincula os dois. Chame identity("hello") e o verificador decidirá T = string para essa chamada, então o resultado será uma string. Chame identity(42) e T = number, então o resultado será um number. Um corpo, todos os tipos, nada é perdido.
T é apenas um nome convencional (abreviação de "Type"): <Item> ou <Value> funcionam igualmente bem. E, como sempre no Luau, os sinais de menor e maior 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 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 item em sua própria linha:
luckyNumbergreetingisReady- o resultado de chamar
identitycom"<code>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(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