Menu
Coddy logo textTech

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

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

Числа делают логи непонятными: видя 2, мало что понятно, но "down" объясняет всё. Для читаемых enum отличным инструментом в Luau являются literal union typestype, чьи элементы являются точными strings:

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

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

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

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

print(facing)            -- вверх
print(`facing {facing}`) -- facing вверх

Сравните два подхода, которые у вас теперь есть: таблица констант создаёт one значение в runtime (UserRole), хранящее элементы, тогда как literal union не создаёт никаких значений вовсе — не существует таблицы Direction, есть только правило анализатора, определяющее, какие strings подходят. Наглядные, самодокументируемые значения с нулевыми затратами в runtime делают literal union предпочтительным стилем enum в коде Luau.

challenge icon

Задание

Легко

Создайте тип literal union с именем 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