Расширение структур
Часть раздела Введение в 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.
Задание
ЛегкоСоздайте следующие псевдонимы типов:
Employee:id(number),name(string),department(string)Manager: расширенныйEmployee(с помощью&) сteamSize(number)Contact:email(string)Developer: пересечениеEmployee,Contactи{yearsExperience: number}
Создайте:
teamLeadтипаManager: id101, name"Alice Johnson", department"Engineering", teamSize8devтипаDeveloper: id102, name"Bob Smith", department"Engineering", email"bob@company.com", yearsExperience5
Создайте функцию getManagerSummary, которая принимает Manager и возвращает [name] manages [teamSize] people.
Выведите каждое значение в отдельной строке:
- результат
getManagerSummary(teamLead) [name] has [yearsExperience] years of experienceдляdev- department объекта
teamLead - email объекта
dev
Попробуйте сами
-- Напишите код здесь
-- 1) определите Employee, затем Manager / Contact / Developer с &
-- 2) создайте teamLead и dev
-- 3) напишите getManagerSummary
-- 4) выведите четыре запрошенных строки
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Введение в Luau
1Начало работы с Luau
Что такое Luau?Почему именно Luau?Ваш первый код на LuauПроверка типов и режимы ошибокИтоги: Введение в Luau4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация анонимных функцийФункции, ничего не возвращающиеНеобязательные параметрыЗначения параметров по умолчаниюФункции с переменным числом аргументовОпределение типов функцийИтоги: типизированные функции2Базовые типы
Основные типы: num, str, boolТип 'any': лазейка в типизацииТип 'unknown'Nil и опциональные типыВывод типов на практикеЯвные аннотации типовИтоги: практика по базовым типам5Псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения (Union)Работа с типами объединенияЛитеральные типыТипы пересечения (Intersection)Комбинирование псевдонимов типовИтоги: Сложные комбинации типов3Типизированные таблицы: Массивы и Map-словари
Типизированные массивыДобавление и чтение элементовЧто такое тип Map?Объявление и доступ к Map-словарямИтерация по таблицамТаблицы смешанной формыМногомерные типизированные массивыtable.unpack и VarargsИтоги: Массивы и Map-словариПотренируйтесь самостоятельно: Онлайн-компилятор Lua