Menu
CoddyTech

Função: Descrever Itens

Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 72 de 80.

challenge icon

Desafio

Médio

Adicione uma função de descrição para cada tipo de item.

  1. Exclua as linhas abaixo de -- Try it.
  2. Escreva local function describeWeapon(item: Weapon): string que retorne `Weapon: {item.name} (damage {item.data.damage})`.
  3. Escreva describePotion(item: Potion): string que retorne `Potion: {item.name} (heals {item.data.heal})`.
  4. Abaixo de -- Try it, imprima describeWeapon(weapons[2]) e describePotion(potions[1]).

Pressione Executar código: a saída mostra Weapon: Fire Axe (damage 40) e Potion: Health Potion (heals 40).

Experimente você mesmo

-- A estrutura de item compartilhada por todos os inventários
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}}
-- Crie um item com o próximo id disponível, armazene-o e retorne-o
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})
-- O item com este id, ou 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})
-- Teste
print(potions[1].data.heal)

Todas as lições de Introdução ao Luau

Pratique por conta própria: Compilador de Luau online