Menu
CoddyTech

Tạo và tiếp tục coroutine

Thuộc phần Logic và luồng chương trình trong hành trình Lua của Coddy. Bài học 49 trên 54.

Bây giờ bạn đã hiểu coroutine là gì, hãy cùng tìm hiểu cách tạo và chạy chúng trong Lua.

Để tạo một coroutine, bạn dùng hàm coroutine.create(). Hàm này nhận một hàm thông thường làm đối số và gói hàm đó thành một đối tượng coroutine. Đây là cú pháp cơ bản:

function myTask()
    print("Hello from coroutine!")
end

local co = coroutine.create(myTask)

Lúc này, coroutine đã tồn tại nhưng chưa bắt đầu chạy. Hàm myTask chưa được gọi. Để thực sự bắt đầu hoặc tiếp tục thực thi coroutine, bạn dùng coroutine.resume():

coroutine.resume(co)

Khi bạn gọi resume() trên một coroutine lần đầu tiên, nó bắt đầu chạy từ đầu hàm. Nếu coroutine chạy đến hết mà không tạm dừng, nó sẽ hoàn thành và không thể tiếp tục chạy lại.

Đây là một ví dụ hoàn chỉnh:

function greet()
    print("Starting...")
    print("Finishing!")
end

local co = coroutine.create(greet)
coroutine.resume(co)  -- In ra cả hai thông báo

Coroutine chạy liên tục từ đầu đến cuối. Trong bài học tiếp theo, bạn sẽ học cách tạm dừng coroutine giữa chừng khi đang chạy.

challenge icon

Thử thách

Dễ

Viết một hàm (function) runSimpleCoroutine nhận message và trả về đầu ra từ một coroutine in ra thông báo đó.

Tạo một coroutine bằng coroutine.create() để bọc một hàm in ra thông báo đã cung cấp. Sau đó dùng coroutine.resume() để thực thi coroutine. Hàm sẽ trả về thông báo đã được in ra.

Lô-gic:

  • Định nghĩa một hàm in ra tham số thông báo
  • Tạo một coroutine từ hàm đó bằng coroutine.create()
  • Tiếp tục coroutine bằng coroutine.resume()
  • Trả về thông báo đã được in ra

Tham số:

  • message (chuỗi): Thông báo mà coroutine sẽ in ra

Giá trị trả về: Thông báo mà coroutine đã in ra (chuỗi)

Tự làm thử

function runSimpleCoroutine(message)
    -- Viết code ở đây
end
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

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