Типы объединения (Union)
Часть раздела Введение в Luau путешествия по Lua на Coddy. Урок 31 из 73.
Иногда одного типа недостаточно. ID пользователя может прийти как "user123" или как 42. В обычном Lua вам оставалось бы только надеяться на лучшее; Luau предоставляет вам типы объединения (union) — вертикальная черта | читается как «или»:
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. В следующем уроке вы узнаете, как безопасно работать со значением объединения, когда оно у вас есть.
Задание
ЛегкоСоздайте функцию с именем printId, которая принимает id: number | string и выводит его — с явным типом возвращаемого значения ().
Объявите переменную status типа string | number, инициализированную значением "<code>active".
Затем по порядку:
- Вызовите
printId(42) - Вызовите
printId("<code>user123") - Выведите
status - Присвойте переменной
statusновое значение200и выведите её снова
Всего четыре строки вывода.
Попробуйте сами
-- Напишите код здесь
-- printId(id: number | string): ()
-- local status: string | number = точный текст из инструкций
-- вызовите printId(42), printId(точный текст из инструкций),
-- выведите status, присвойте 200, выведите снова
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Введение в Luau
1Начало работы с Luau
Что такое Luau?Почему именно Luau?Ваш первый код на LuauПроверка типов и режимы ошибокИтоги: Введение в Luau4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация анонимных функцийФункции, ничего не возвращающиеНеобязательные параметрыЗначения параметров по умолчаниюФункции с переменным числом аргументовОпределение типов функцийИтоги: типизированные функции2Базовые типы
Основные типы: num, str, boolТип 'any': лазейка в типизацииТип 'unknown'Nil и опциональные типыВывод типов на практикеЯвные аннотации типовИтоги: практика по базовым типам5Псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения (Union)Работа с типами объединенияЛитеральные типыТипы пересечения (Intersection)Комбинирование псевдонимов типовИтоги: Сложные комбинации типов3Типизированные таблицы: Массивы и Map-словари
Типизированные массивыДобавление и чтение элементовЧто такое тип Map?Объявление и доступ к Map-словарямИтерация по таблицамТаблицы смешанной формыМногомерные типизированные массивыtable.unpack и VarargsИтоги: Массивы и Map-словариПотренируйтесь самостоятельно: Онлайн-компилятор Lua