Menu
Coddy logo textTech

Расширение структур

Часть раздела Введение в Luau путешествия по Lua на Coddy. Урок 41 из 73.

Связанные структуры часто имеют общие поля. Каждый Admin также является User; копирование общих полей в оба объявления приводит к тому, что они начинают расходиться.

Вы уже встречались с оператором пересечения & при объединении псевдонимов. Для структур он работает точно так же. A & B означает «содержит всё из A и всё из B»:

type User = {name: string, age: number}
type Admin = User & {level: number}

-- Admin теперь требует: name, age и level
local root: Admin = {name = "Root", age = 35, level = 9}

В то время как TypeScript требует отдельного ключевого слова extends для интерфейсов, Luau не требует ничего нового: пересечения уже выполняют эту работу. Можно объединить несколько частей:

type Contact = {email: string}
type Developer = User & Contact & {yearsExperience: number}

Не путай & с |: объединение A | B представляет собой либо одну структуру, либо другую, тогда как пересечение A & B должно одновременно удовлетворять обеим. И поскольку Admin содержит все поля User, значение типа Admin можно передать везде, где ожидается User.

challenge icon

Задание

Легко

Создайте следующие псевдонимы типов:

  • Employee: id (number), name (string), department (string)
  • Manager: расширенный Employee (с помощью &) с teamSize (number)
  • Contact: email (string)
  • Developer: пересечение Employee, Contact и {yearsExperience: number}

Создайте:

  • teamLead типа Manager: id 101, name "Alice Johnson", department "Engineering", teamSize 8
  • dev типа Developer: id 102, name "Bob Smith", department "Engineering", email "bob@company.com", yearsExperience 5

Создайте функцию getManagerSummary, которая принимает Manager и возвращает [name] manages [teamSize] people.

Выведите каждое значение в отдельной строке:

  1. результат getManagerSummary(teamLead)
  2. [name] has [yearsExperience] years of experience для dev
  3. department объекта teamLead
  4. email объекта dev

Попробуйте сами

-- Напишите код здесь
-- 1) определите Employee, затем Manager / Contact / Developer с &
-- 2) создайте teamLead и dev
-- 3) напишите getManagerSummary
-- 4) выведите четыре запрошенных строки
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Введение в Luau

Потренируйтесь самостоятельно: Онлайн-компилятор Lua