Menu
Coddy logo textTech

Строковые перечисления как объединения

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

Числа делают логи загадочными: увидев 2, вы мало что поймёте, а увидев "down" — всё. Для удобочитаемых перечислений в Luau есть literal объединения типов: тип, члены которого являются точными строками:

type Direction = "up" | "down" | "left" | "right"

local facing: Direction = "up"    -- ✓
local typo: Direction = "upp"     -- ✗ ошибка типа при редактировании

Переменная, аннотированная с помощью Direction, может содержать эти four строки и ничего больше. Допустите опечатку — и проверяющий немедленно её обнаружит: ошибка никогда не дойдёт до player.

Во время runtime значения являются plain strings. Выводите их, объединяйте, сравнивайте с помощью ==. Всё, что вы знаете о strings, применимо и здесь:

print(facing)            -- вверх
print(`facing {facing}`) -- лицом вверх

Сравните два имеющихся у вас шаблона: постоянная таблица create одно значение runtime (UserRole), содержащее members, тогда как literal объединение не создаёт вообще никакого значения. Таблицы Direction не существует — есть только правило, которое проверяющий применяет к подходящим строкам. Описательные, самодокументируемые значения с нулевой стоимостью во время runtime делают literal объединения предпочтительным стилем enum в коде Luau.

challenge icon

Задание

Легко

Создай тип объединения литералов с именем Direction и членами "up", "down", "left" и "right".

Создай четыре переменные, каждую с аннотацией Direction:

  • upDirection = "up"
  • downDirection = "down"
  • leftDirection = "left"
  • rightDirection = "right"

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

  1. upDirection
  2. downDirection
  3. leftDirection
  4. rightDirection
  5. сообщение The player moves left, составленное с помощью интерполяции строк из leftDirection

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

-- Напишите код здесь
-- 1) определите тип Direction как объединение четырёх строковых литералов
-- 2) создайте четыре аннотированные переменные
-- 3) выведите каждую, затем интерполированное сообщение
quiz iconПроверьте себя

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

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

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