Menu
CoddyTech

Hàm in ra bản tóm tắt công việc

Thuộc phần Giới thiệu về Luau trong hành trình Lua của Coddy. Bài học 51 trên 80.

challenge icon

Thử thách

Dễ

Thêm một hàm để in ra tiến độ của danh sách.

  1. Xóa các dòng bên dưới -- Try it.
  2. Viết local function printSummary(list: {Task}): () để đếm số tác vụ đã hoàn thành và in ra `{doneCount}/{#list} tasks done`.
  3. Bên dưới -- Try it, gọi printSummary(tasks), sau đó gọi completeTask(tasks, 2), rồi gọi lại printSummary(tasks).

Nhấn Run Code: đầu ra hiển thị 1/3 tasks done, rồi đến 2/3 tasks done.

Tự làm thử

-- Cấu trúc mà mọi tác vụ trong trình quản lý đều tuân theo
type Task = {
    id: number,
    title: string,
    done: boolean,
}
local tasks: {Task} = {
    {id = 1, title = "Learn Luau types", done = false},
    {id = 2, title = "Build a task manager", done = false},
    {id = 3, title = "Write tests", done = true},
}
-- Tạo một tác vụ với id chưa dùng tiếp theo rồi thêm vào danh sách
local function addTask(list: {Task}, title: string): Task
    local newTask: Task = {id = #list + 1, title = title, done = false}
    table.insert(list, newTask)
    return newTask
end
-- Đánh dấu tác vụ có id này là hoàn thành; cho biết có tìm thấy tác vụ đó không
local function completeTask(list: {Task}, id: number): boolean
    for _, t in ipairs(list) do
        if t.id == id then
            t.done = true
            return true
        end
    end
    return false
end
-- Danh sách mới gồm các tác vụ có cờ done khớp với giá trị cần tìm
local function filterTasks(list: {Task}, done: boolean): {Task}
    local result: {Task} = {}
    for _, t in ipairs(list) do
        if t.done == done then
            table.insert(result, t)
        end
    end
    return result
end
-- Thử chạy
local pending = filterTasks(tasks, false)
print(#pending)
print(pending[2].title)

Tất cả bài học trong Giới thiệu về Luau

Tự luyện tập: Trình biên dịch Luau online