Menu
CoddyTech

Литеральные типы

Часть раздела Введение в 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 заменой перечислениям из других языков, как ты увидишь в одной из следующих глав.

challenge icon

Задание

Легко

Допускаются только четыре точных названия направлений.

  1. Напиши type Direction = "north" | "south" | "east" | "west".
  2. Напиши local function movePlayer(direction: Direction): string, возвращающую `Moving {direction}`.
  3. Объяви 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

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