Menu
CoddyTech

Типы объединения (Union)

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

Иногда одного типа недостаточно. Идентификатор пользователя может иметь вид "user123" или 42. В обычном Lua остаётся только надеяться на лучшее; в Luau есть объединения типов: вертикальная черта | означает «или»:

local userId: number | string

userId = "user123"  -- ✓ строка допустима
userId = 42          -- ✓ число допустимо
userId = true        -- ✗ ошибка типа: boolean не входит в объединение

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

Объединения особенно полезны для параметров функций, принимающих данные в нескольких форматах:

function printId(id: number | string): ()
    print(id)
end

printId(42)          -- работает с числом
printId("user123")   -- работает со строкой

Ты уже знаешь string?. Это было твоё первое объединение! Это просто сокращённая запись string | nil. В следующем уроке ты узнаешь, как безопасно работать со значением объединения, когда оно у тебя появится.

challenge icon

Задание

Легко

Принимай значение, которое является числом или строкой.

  1. Напиши local function printId(id: number | string): (), которая выводит id.
  2. Объяви local status: string | number = "active".
  3. Вызови printId(7) и printId("player7"), затем присвой status = 200 и выведи его.

Нажми Run Code: в выводе отображаются 7, player7 и 200.

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

-- 1) printId(id: number | string): ()
-- 2) local status: string | number = "active"
-- 3) вызовите printId(7) и printId("player7"), установите status равным 200 и выведите его

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

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