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áoCoroutine 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.
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
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
2Các hàm khác của thư viện table
table.concat()Tạo table và unpack()table.sort()Sắp xếp tùy chỉnh bằng hàmÔn tập: Bảng điểm cao5Dự án: Bộ máy trò chơi phiêu lưu bằng văn bản
Thiết lập dự án: Căn phòngLiên kết các phòng3Các khái niệm nâng cao về hàm
Trả về nhiều giá trịHàm nhận số lượng đối số linh hoạt (...)Hàm là giá trị hạng nhấtHàm ẩn danhClosure là gì?Ôn tập: bộ xử lý sự kiện đơn giản9Coroutine cho người mới bắt đầu
Coroutine là gì?Tạo và tiếp tục coroutineTạm dừng bằng coroutine.yield()Resume và yieldKiểm tra trạng thái coroutineÔn tập: trình tạo sốÔn tập: phép toán vectơTự luyện tập: Trình biên dịch Lua online