Trả lời truy vấn vật phẩm
Thuộc phần Giới thiệu về Luau trong hành trình Lua của Coddy. Bài học 73 trên 80.
Thử thách
Trung bìnhTrả lời người chơi khi họ hỏi về một vật phẩm.
- Xóa các dòng bên dưới
-- Try it. - Bên dưới đó, đọc
local category = io.read()vàlocal id: number = tonumber(io.read()) or 0. - Với
"weapon", in radescribeWeapon(item)chofindItem(weapons, id); nếu không thì dùngpotionsvàdescribePotion. - In ra
Item not foundkhifindItemtrả vềnil.
Nhấn Run Code: với đầu vào là weapon và 2, bạn sẽ thấy Weapon: Fire Axe (damage 40).
Tự làm thử
-- Cấu trúc item chung cho mọi kho đồ
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}}
-- Tạo item với id chưa dùng tiếp theo, lưu rồi trả về item đó
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})
-- Item có id này, hoặc 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})
-- Mỗi loại item có một mô tả riêng
local function describeWeapon(item: Weapon): string
return `Weapon: {item.name} (damage {item.data.damage})`
end
local function describePotion(item: Potion): string
return `Potion: {item.name} (heals {item.data.heal})`
end
-- Chạy thử
print(describeWeapon(weapons[2]))
print(describePotion(potions[1]))
Tất cả bài học trong Giới thiệu về Luau
1Bắt đầu với Luau
Luau là gì?Tại sao nên dùng Luau?Đoạn code Luau đầu tiênKiểm tra kiểu và chế độ lỗiÔn tập: Giới thiệu về Luau4Làm việc với hàm
Kiểu dữ liệu cho tham số và giá trị trả vềKiểu dữ liệu cho hàm ẩn danhHàm không trả về giá trịTham số tùy chọnGiá trị tham số mặc địnhGiá trị Boolean mặc địnhHàm có số lượng tham số thay đổiĐịnh nghĩa kiểu hàmÔn tập: hàm có kiểu dữ liệu7Dự án: trình quản lý công việc định kiểu
Dự án: cấu trúc công việcHàm thêm công việc10Dự án: kho vật phẩm tổng quát
Dự án: vật phẩm trong khoHàm: thêm vật phẩm2Kiểu dữ liệu cốt lõi
Số, chuỗi và BooleanKiểu 'any': lối thoátKiểu 'unknown'Kiểu Nil và kiểu tùy chọnSuy luận kiểu trong thực tếChú thích kiểu tường minhÔn tập: luyện tập với kiểu dữ liệu cốt lõi5Bí danh kiểu, kiểu hợp và kiểu giao
Bí danh kiểu cho kiểu nguyên thủyKiểu hợpLàm việc với kiểu hợpKiểu literalKiểu giaoKết hợp bí danh kiểuÔn tập: kết hợp kiểu nâng cao3Bảng có kiểu: mảng và Map
Mảng có kiểuThêm và đọc phần tửKiểu Map là gì?Khai báo và truy cập MapDuyệt bảngBảng có cấu trúc hỗn hợpĐọc lướiTạo lướitable.unpackÔn tập: mảng và MapTự luyện tập: Trình biên dịch Luau online