Menu
CoddyTech

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

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

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

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

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

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

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

print(facing)            -- up
print(`facing {facing}`) -- facing up

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

challenge icon

Задание

Легко

Сохраните направление, которое может иметь только одно из четырёх значений.

  1. Напишите type Direction = "up" | "down" | "left" | "right".
  2. Объявите local facing: Direction = "left".
  3. Выведите facing, затем `The player moves {facing}`.

Нажмите Run Code: в выводе отображаются left и The player moves left.

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

-- 1) задайте тип Direction как объединение четырёх строк
-- 2) локальная переменная facing: Direction = "left"
-- 3) выведите facing, затем предложение

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

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