Fonction : Obtenir les détails de l'élément
Fait partie de la section Introduction à Luau du Journey Lua de Coddy — leçon 67 sur 73.
Défi
MoyenTerminez le projet ! Conservez tout ce qui a été fait dans la leçon précédente : Item<T>, addItem, findItem, les alias Weapon/Potion, ainsi que les deux inventaires (weapons : Iron Sword 25 / Fire Axe 40, potions : Health Potion 40 / Mega Potion 90).
- Écrivez
describeWeapon(item: Weapon): stringrenvoyantWeapon: [name] (damage [damage]). - Écrivez
describePotion(item: Potion): stringrenvoyantPotion: [name] (heals [heal]). - Lisez le nombre de requêtes avec
tonumber(io.read()). - Pour chaque requête, lisez une ligne de catégorie (
weaponoupotion) et une ligne d'identifiant (à convertir avectonumber). Cherchez dans l'inventaire correspondant avecfindItem: affichez la description si l'élément existe, ouItem not founddans le cas contraire.
Par exemple, l'entrée 2, weapon, 2, potion, 1 (une valeur par ligne) affiche :
Weapon: Fire Axe (damage 40)
Potion: Health Potion (heals 40)Essayez vous-même
-- Le système d'inventaire des leçons précédentes
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})
-- Écrivez le code ici
-- 1) describeWeapon(item: Weapon): string et describePotion(item: Potion): string
-- 2) lire le nombre de requêtes, puis par requête : ligne de catégorie + ligne d'id
-- 3) findItem in the right inventory; print the description or "Item not found"
Toutes les leçons de Introduction à Luau
1Premiers pas avec Luau
Qu'est-ce que Luau ?Pourquoi utiliser Luau ?Votre premier code LuauVérification de type et modes d'erreurRécapitulatif : Introduction à Luau4Travailler avec les fonctions
Typage des paramètres et valeurs de retourTypage des fonctions anonymesFonctions ne retournant rienParamètres optionnelsValeurs par défaut des paramètresFonctions variadiquesDéfinition des types de fonctionsRécapitulatif : Fonctions typées7Projet : Gestionnaire de tâches typé
Projet : La structure d'une tâcheFonction pour ajouter une tâche10Projet : Inventaire générique
Projet : Élément d'inventaireFonction : Ajouter des éléments2Types fondamentaux
Types de base : num, str, boolLe type 'any' : la porte de sortieLe type 'unknown'Types Nil et optionnelsL'inférence de type en actionAnnotations explicites de typeRécapitulatif : Pratique des types fondamentaux5Alias, unions et intersections
Alias de types pour les types primitifsTypes unionsTravailler avec les types unionsTypes littérauxTypes intersectionsCombinaison d'alias de typesRécapitulatif : Combinaisons de types avancées3Tables typées : Tableaux et Maps
Tableaux typésAjout et lecture d'élémentsQu'est-ce qu'un type Map ?Déclaration et accès aux MapsItération sur les tablesTables à formes mixtesTableaux typés multidimensionnelstable.unpack et VarargsRécapitulatif : Tableaux et Maps