Menu
Coddy logo textTech

Проблема, которую решают Generics

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

Представьте, что вам нужна функция, которая просто возвращает любое переданное ей значение: тождественная функция. С известными вам на данный момент типами у вас есть два варианта, и оба неудобны.

Вариант первый: написать отдельную копию для каждого типа. Тела функций идентичны; различаются только аннотации:

local function echoNumber(value: number): number
    return value
end

local function echoString(value: string): string
    return value
end

Каждый новый тип означает ещё одну копию, а ошибку, исправленную в одной копии, нужно исправлять во всех остальных. Именно такого дублирования вы и стараетесь избегать, когда пишете функции.

Вариант второй: объединить их в одну функцию с типом any:

local function echo(value: any): any
    return value
end

Теперь одна функция обрабатывает всё, но платой за это становится безопасность типов. Когда вы вызываете echo("hello"), checker больше не знает, что результат является строкой. Он знает только any, поэтому автодополнение перестаёт работать, а ошибки типов проходят незамеченными: связь между тем, что поступило на вход, и тем, что получилось на выходе, теряется.

На самом деле вам нужна функция, которая работает с любым типом и запоминает, какой тип использовался в каждом вызове. Именно это дают вам обобщённые типы, и им посвящена эта глава.

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

В этом уроке нет задания по программированию.

quiz iconПроверьте себя

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

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

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