Литеральные типы
Часть раздела Введение в Luau путешествия по Lua на Coddy. Урок 35 из 80.
Типы вроде string допускают любые строки, но иногда имеют смысл лишь несколько строго определённых значений. Литеральный тип использует само значение в качестве типа:
local mode: "dark" = "dark" -- допускается только строка "dark"
local locked: true = true -- допускается только логическое значение trueСами по себе типы с единственным значением — всего лишь любопытная особенность. В сочетании с объединениями они становятся одним из самых полезных инструментов Luau: строго ограниченным набором допустимых значений:
type Direction = "north" | "south" | "east" | "west"
type GameState = "menu" | "playing" | "paused" | "gameover"
local move: Direction = "north" -- ✓
local state: GameState = "playing" -- ✓
-- local bad: Direction = "diagonal" -- ✗ ошибка типа!Теперь опечатка вроде "nort" или недопустимое значение вроде "diagonal" будут обнаружены во время редактирования. С обычным типом string такая ошибка осталась бы незамеченной и привела бы к сбою во время выполнения — если бы тебе повезло его заметить.
Литеральные типы чувствительны к регистру и требуют точного совпадения: "North" не соответствует "north". Чаще всего используются строковые литералы, но логические литералы и (в более новых версиях Luau) числовые литералы работают так же. Этот шаблон — объединение строковых литералов — также служит в Luau заменой перечислениям из других языков, как ты увидишь в одной из следующих глав.
Задание
ЛегкоДопускаются только четыре точных названия направлений.
- Напиши
type Direction = "north" | "south" | "east" | "west". - Напиши
local function movePlayer(direction: Direction): string, возвращающую`Moving {direction}`. - Объяви
local playerDirection: Direction = "east"и выведиmovePlayer(playerDirection).
Нажми Run Code: в выводе появится Moving east.
Попробуйте сами
-- 1) type Direction = "north" | "south" | "east" | "west"
-- 2) movePlayer(direction: Direction): string
-- 3) local playerDirection: Direction = "east", затем выведите ход
Все уроки раздела Введение в Luau
1Начало работы с Luau
Что такое Luau?Почему именно Luau?Ваш первый код на LuauПроверка типов и режимы ошибокИтоги: Введение в Luau4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация анонимных функцийФункции без возвращаемого значенияНеобязательные параметрыЗначения параметров по умолчаниюЗначения по умолчанию для булевых параметровФункции с переменным числом аргументовОпределение типов функцийПовторение: типизированные функции2Основные типы
Число, строка и булево значениеТип 'any': запасной выходТип 'unknown'Nil и опциональные типыВывод типов на практикеЯвные аннотации типовПовторение: практика с основными типами5Псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения (Union)Работа с типами объединенияЛитеральные типыТипы пересечения (Intersection)Комбинирование псевдонимов типовИтоги: Сложные комбинации типов3Типизированные таблицы: массивы и отображения
Типизированные массивыДобавление и чтение элементовЧто такое тип отображения?Объявление и доступ к отображениямПеребор таблицТаблицы смешанной структурыЧтение сеткиСоздание сеткиtable.unpackПовторение: массивы и отображенияПотренируйтесь самостоятельно: Онлайн-компилятор Luau