Función: Obtener detalles del elemento
Parte de la sección Introducción a Luau del Journey de Lua de Coddy — lección 67 de 73.
Desafío
Intermedio¡Termina el proyecto! Conserva todo lo de la lección anterior: Item<T>, addItem, findItem, los alias Weapon/Potion y ambos inventarios (weapons: Iron Sword 25 / Fire Axe 40, potions: Health Potion 40 / Mega Potion 90).
- Escribe
describeWeapon(item: Weapon): stringque devuelvaWeapon: [name] (damage [damage]). - Escribe
describePotion(item: Potion): stringque devuelvaPotion: [name] (heals [heal]). - Lee el número de consultas con
tonumber(io.read()). - Para cada consulta, lee una línea de categoría (
weaponopotion) y una línea de id (convierte contonumber). Busca en el inventario correspondiente usandofindItem: imprime la descripción si el elemento existe, oItem not founden caso contrario.
Por ejemplo, la entrada 2, weapon, 2, potion, 1 (un valor por línea) imprime:
Weapon: Fire Axe (damage 40)
Potion: Health Potion (heals 40)Pruébalo tú mismo
-- El sistema de inventario de las lecciones anteriores
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 function findItem<T>(inventory: {Item<T>}, id: number): Item<T>?
for _, item in ipairs(inventory) do
if item.id == id then
return item
end
end
return nil
end
type WeaponData = {damage: number}
type PotionData = {heal: number}
type Weapon = Item<WeaponData>
type Potion = Item<PotionData>
local weapons: {Weapon} = {}
addItem(weapons, "Iron Sword", {damage = 25})
addItem(weapons, "Fire Axe", {damage = 40})
local potions: {Potion} = {}
addItem(potions, "Health Potion", {heal = 40})
addItem(potions, "Mega Potion", {heal = 90})
-- Escribe el código aquí
-- 1) describeWeapon(item: Weapon): string y describePotion(item: Potion): string
-- 2) lee la cantidad de consultas, luego por cada consulta: línea de categoría + línea de id
-- 3) findItem in the right inventory; print the description or "Item not found"
Todas las lecciones de Introducción a Luau
1Primeros pasos con Luau
¿Qué es Luau?¿Por qué usar Luau?Tu primer código en LuauComprobación de tipos y modos de errorRecapitulacion: Introducción a Luau4Trabajando con Funciones
Tipado de Parámetros y Valores de RetornoTipado de Funciones AnónimasFunciones que no Retornan NadaParámetros OpcionalesValores por Defecto en ParámetrosFunciones VariádicasDefinición de Tipos de FuncionesRecapitulaciones: Funciones Tipadas7Proyecto: Gestor de tareas tipado
Proyecto: La forma de la tareaFunción para añadir una tarea10Proyecto: Inventario genérico
Proyecto: Elemento de inventarioFunción: Añadir elementos2Tipos principales
Tipos básicos: num, str, boolEl tipo 'any': Vía de escapeEl tipo 'unknown'Tipos nulos y opcionalesInferencia de tipos en acciónAnotaciones explícitas de tiposResumen: Práctica de tipos principales5Alias, Uniones e Intersecciones
Alias de tipos para primitivosTipos de uniónTrabajando con tipos de uniónTipos literalesTipos de intersecciónCombinando alias de tiposResumen: Combinaciones avanzadas de tipos3Tablas tipadas: Arrays y Maps
Arrays tipadosAñadir y leer elementos¿Qué es un tipo Map?Declarar y acceder a MapsIterar tablasTablas de forma mixtaArrays tipados multidimensionalestable.unpack y VarargsRecapitulaciones: Arrays y Maps