Menu
Coddy logo textTech

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

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

Типы вроде string допускают любую строку, но иногда имеют смысл только несколько точных значений. Тип literal использует само значение в качестве типа:

local mode: "dark" = "dark"   -- разрешена только строка "dark"
local locked: true = true      -- разрешено только булево значение true

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

Типы literal чувствительны к регистру и требуют точного совпадения: "North" не соответствует "north". Строковые literal — самый распространённый случай, но boolean и (в более новых версиях Luau) числовые literal работают так же. Этот шаблон — объединение строковых literal — также используется в Luau вместо перечислений других языков, как ты увидишь в следующей главе.

challenge icon

Задание

Легко

Create three literal-union type aliases:

  • Direction = "north" | "south" | "east" | "west"
  • GameState = "menu" | "playing" | "paused" | "gameover"
  • Difficulty = "easy" | "medium" | "hard"

Объяви, используя псевдонимы:

  • playerDirection: Direction = "north"
  • currentState: GameState = "playing"
  • selectedDifficulty: Difficulty = "medium"

Создай function movePlayer(direction: Direction): string, возвращающую "Moving [direction]", и function updateGameState(state: GameState): string, возвращающую "Game state: [state]".

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

  1. movePlayer(playerDirection)
  2. updateGameState(currentState)
  3. значение selectedDifficulty

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

-- Напишите код здесь
-- тип Direction / GameState / Difficulty как литеральные объединения
-- объявите playerDirection, currentState, selectedDifficulty
-- movePlayer(direction: Direction): string -> "Moving [direction]"
-- updateGameState(state: GameState): string -> "Game state: [state]"
-- выведите три результата
quiz iconПроверьте себя

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

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

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