Встроенные аннотации структур
Часть раздела Введение в Luau путешествия по Lua на Coddy. Урок 37 из 73.
В Lua вы уже давно используете таблицы как записи: local user = {name = "Ana", age = 20}. Ничто не мешает вам допустить опечатку в имени поля, забыть поле или сохранить string там, где должен быть number. Вы узнаете об этом только при запуске кода.
Luau позволяет описать shape такой таблицы прямо в объявлении, перечислив каждое поле и его тип между фигурными скобками:
local user: {name: string, age: number} = {
name = "Ana",
age = 20,
}Сравните это с уже знакомыми вам типами таблиц: {number} описывает массив, а {[string]: number} описывает отображение с любыми строковыми ключами. shape является более точным описанием. В нём каждое поле указывается отдельно и для каждого поля задаётся собственный тип.
После объявления shape проверяющий типов проверяет таблицу на соответствие ему во время редактирования. Отсутствующее поле или неверный тип значения отмечается ещё до запуска кода:
local user: {name: string, age: number} = {
name = "Ana",
age = "twenty", -- ✗ ошибка типа: string is not a number
}Как всегда, аннотация не добавляет поведения во время выполнения: таблица остаётся обычной таблицей Lua. Встроенные shape идеально подходят для одноразовых структур, которые вы не планируете повторно использовать; в следующем уроке вы дадите shape имя.
Задание
ЛегкоСоздай переменную с именем student с аннотацией формы inline, объявляющей:
nameтипаstringstudentIdтипаnumberisEnrolledтипаboolean
Инициализируй её значением имени "Sarah Johnson", studentId 12345 и isEnrolled true.
Создай вторую переменную с именем course с аннотацией формы inline, объявляющей:
titleтипаstringcreditsтипаnumberinstructorтипаstring
Инициализируй её значением title "Introduction to Luau", credits 3 и instructor "Dr. Smith".
Выведи, каждое значение на отдельной строке:
- имя студента
- ID студента
- название курса
- количество кредитов
Попробуйте сами
-- Напишите код здесь
-- 1) объявите student с inline shape annotation
-- 2) объявите course с inline shape annotation
-- 3) выведите четыре запрошенных поля
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Введение в 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-словари6Типизация структуры таблиц
Встроенные аннотации структурПсевдонимы типов для структурНеобязательные свойстваСтруктурированные и произвольные таблицыРасширение структурДобавление методов в структурыМетоды с Self и двоеточиемИтоги: Определение структуры таблицПотренируйтесь самостоятельно: Онлайн-компилятор Lua