Menu
CoddyTech

Función: Describir elementos

Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 72 de 80.

challenge icon

Desafío

Intermedio

Añade una función de descripción para cada tipo de objeto.

  1. Elimina las líneas debajo de -- Try it.
  2. Escribe local function describeWeapon(item: Weapon): string para que devuelva `Weapon: {item.name} (damage {item.data.damage})`.
  3. Escribe describePotion(item: Potion): string para que devuelva `Potion: {item.name} (heals {item.data.heal})`.
  4. Debajo de -- Try it, imprime describeWeapon(weapons[2]) y describePotion(potions[1]).

Pulsa Ejecutar código: la salida muestra Weapon: Fire Axe (damage 40) y Potion: Health Potion (heals 40).

Pruébalo tú mismo

-- La estructura de elemento que comparten todos los inventarios
type Item<T> = {
    id: number,
    name: string,
    data: T,
}
local sword: Item<{damage: number}> = {id = 1, name = "Iron Sword", data = {damage = 25}}
local potion: Item<{heal: number}> = {id = 2, name = "Health Potion", data = {heal = 40}}
-- Crea un elemento con el siguiente id disponible, guárdalo y devuélvelo
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
type Weapon = Item<{damage: number}>
type Potion = Item<{heal: number}>
local weapons: {Weapon} = {}
addItem(weapons, "Iron Sword", {damage = 25})
addItem(weapons, "Fire Axe", {damage = 40})
-- El elemento con este id, o nil
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
local potions: {Potion} = {}
addItem(potions, "Health Potion", {heal = 40})
-- Pruébalo
print(potions[1].data.heal)

Todas las lecciones de Introducción a Luau

Practica por tu cuenta: Compilador de Luau online