Функция: Поиск элемента по ID
Часть раздела Введение в Luau путешествия по Lua на Coddy — урок 65 из 73.
Задание
ЛегкоРасширьте ваш проект из предыдущего урока (сохраните Item<T>, addItem и инвентарь weapons с двумя его предметами).
- Напишите обобщённую функцию
findItem<T>(inventory: {Item<T>}, id: number): Item<T>?, которая перебирает инвентарь и возвращает предмет, чейidсовпадает, илиnil, если совпадений нет. - Вызовите
findItem(weapons, 2). Если она возвращает предмет, выведитеnameпредмета, а затем егоdata.damage(две строки); в противном случае выведитеItem not found. - Вызовите
findItem(weapons, 99). Если она возвращает предмет, выведитеnameпредмета; в противном случае выведитеItem not found.
Попробуйте сами
-- Из предыдущих уроков
type Item<T> = {
id: number,
name: string,
data: T,
}
local function addItem<T>(inventory: {Item<T>}, name: string, data: T): Item<T>
local item: Item<T> = {
id = #inventory + 1,
name = name,
data = data,
}
table.insert(inventory, item)
return item
end
local weapons: {Item<{damage: number}>} = {}
local sword = addItem(weapons, "Iron Sword", {damage = 25})
local axe = addItem(weapons, "Fire Axe", {damage = 40})
-- Напишите код здесь
-- 1) findItem<T>(inventory: {Item<T>}, id: number): Item<T>?
-- 2) look up ids 2 and 99, printing details or "Item not found"
Все уроки раздела Введение в Luau
1Начало работы с Luau
Что такое Luau?Почему именно Luau?Ваш первый код на LuauПроверка типов и режимы ошибокИтоги: Введение в Luau4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация анонимных функцийФункции, ничего не возвращающиеНеобязательные параметрыЗначения параметров по умолчаниюФункции с переменным числом аргументовОпределение типов функцийИтоги: типизированные функции7Проект: Типизированный менеджер задач
Проект: Структура задачиФункция для добавления задачи10Проект: Обобщенный инвентарь
Проект: Элемент инвентаряФункция: Добавление элементов2Базовые типы
Основные типы: num, str, boolТип 'any': лазейка в типизацииТип 'unknown'Nil и опциональные типыВывод типов на практикеЯвные аннотации типовИтоги: практика по базовым типам5Псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения (Union)Работа с типами объединенияЛитеральные типыТипы пересечения (Intersection)Комбинирование псевдонимов типовИтоги: Сложные комбинации типов3Типизированные таблицы: Массивы и Map-словари
Типизированные массивыДобавление и чтение элементовЧто такое тип Map?Объявление и доступ к Map-словарямИтерация по таблицамТаблицы смешанной формыМногомерные типизированные массивыtable.unpack и VarargsИтоги: Массивы и Map-словари