Menu
Coddy logo textTech

Tipos de Interseção

Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 34 de 73.

Uniões dizem que um valor é de um tipo ou de outro. Tipos de interseção apontam na outra direção: o e comercial & combina estruturas de tabelas em um tipo que tem todos os campos de cada parte:

type HasName = { name: string }
type HasAge = { age: number }

type Person = HasName & HasAge

-- um Person deve ter AMBOS os campos
local user: Person = {
    name = "Alice",
    age = 25,
}

Deixe de fora age e o verificador reclamará: uma interseção é um "e", nunca uma escolha entre opções. Isso permite criar estruturas grandes a partir de pequenas partes reutilizáveis: defina tipos focados para preocupações separadas e, em seguida, una-os conforme necessário:

type HasEmail = { email: string }

type Employee = HasName & HasAge & HasEmail

Uma observação importante sobre Luau: faça a interseção de estruturas de tabelas (e tipos function), não de tipos primitivos. Algo como number & string não faz sentido, pois nenhum valor pode ser ambos ao mesmo tempo. Quando você quiser "esta estrutura mais aquela estrutura", & é a ferramenta certa.

Em tempo de execução, é claro, um Person é apenas uma tabela Lua comum: a interseção existe somente para o verificador.

challenge icon

Desafio

Fácil

Crie dois aliases de forma: HasName com um campo name: string e HasAge com um campo age: number.

Crie Person como a interseção HasName & HasAge.

Crie HasEmail com um campo email: string e Employee como a interseção dos três: HasName & HasAge & HasEmail.

Declare:

  • user: Person com nome "Alice" e idade 25
  • worker: Employee com nome "Bob", idade 30 e e-mail "bob@company.com"

Crie displayPerson(person: Person): string retornando "Name: [name], Age: [age]" e displayEmployee(employee: Employee): string retornando "Name: [name], Age: [age], Email: [email]".

Imprima displayPerson(user) e displayEmployee(worker) em linhas separadas.

Experimente você mesmo

-- Escreva o código aqui
-- type HasName = { name: string }, HasAge, HasEmail
-- type Person = HasName & HasAge
-- type Employee = HasName & HasAge & HasEmail
-- declare user e worker, escreva as duas funções display,
-- imprima displayPerson(user) e displayEmployee(worker)
quiz iconTeste seus conhecimentos

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

Pratique por conta própria: Compilador de Lua online