Memeriksa Status Coroutine
Termasuk bagian Logika dan Alur dalam perjalanan Lua di Coddy. Pelajaran 52 dari 54.
Saat bekerja dengan coroutine, kamu sering perlu mengetahui status coroutine. Apakah coroutine sedang berjalan? Apakah coroutine dijeda dan menunggu untuk dilanjutkan? Apakah coroutine sudah selesai dijalankan?
Lua menyediakan fungsi coroutine.status() untuk menjawab pertanyaan-pertanyaan ini.
Fungsi coroutine.status() menerima coroutine sebagai argumennya dan mengembalikan string yang menjelaskan statusnya saat ini. Ada tiga kemungkinan status:
| "suspended" | Coroutine dijeda pada yield() dan dapat dilanjutkan |
| "running" | Coroutine sedang dijalankan |
| "dead" | Coroutine telah selesai dijalankan dan tidak dapat dilanjutkan lagi |
Berikut cara menggunakannya:
function task()
coroutine.yield()
print("Finishing")
end
local co = coroutine.create(task)
print(coroutine.status(co)) -- "suspended"
coroutine.resume(co)
print(coroutine.status(co)) -- "suspended" (dijeda pada yield)
coroutine.resume(co)
print(coroutine.status(co)) -- "dead" (selesai)Tantangan
MudahTulis fungsi checkCoroutineLifecycle yang menerima resumeCount dan mengembalikan string yang menunjukkan status coroutine pada berbagai titik dalam siklus hidupnya.
Buat coroutine yang melakukan yield sekali, lalu selesai. Periksa dan catat statusnya setelah dibuat, setelah resume pertama (saat coroutine dijeda pada yield), dan setelah resume selanjutnya berdasarkan resumeCount.
Logika:
- Buat fungsi yang melakukan yield dengan string
"paused"sekali, lalu selesai - Bungkus fungsi ini dalam coroutine menggunakan
coroutine.create() - Periksa status segera setelah pembuatan menggunakan
coroutine.status() - Lakukan resume pada coroutine sekali, lalu periksa statusnya lagi
- Lakukan resume pada coroutine beberapa kali lagi berdasarkan
resumeCount - 1(total resume = resumeCount) - Periksa status akhir setelah semua resume
- Kembalikan string yang memuat ketiga status dengan format:
initial: [status]\\nafter first resume: [status]\\nfinal: [status]
Parameter:
resumeCount(number): Jumlah total resume pada coroutine (minimal 1)
Nilai yang dikembalikan: String yang menunjukkan status coroutine pada tiga titik dalam siklus hidupnya (string). Format: initial: suspended\nafter first resume: suspended\nfinal: dead
Coba sendiri
function checkCoroutineLifecycle(resumeCount)
-- Tulis kodemu di sini
end
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Iterasi Tabel Tingkat Lanjut
Iterasi dengan pairs()Iterasi dengan ipairs()pairs() vs. ipairs()Rangkuman: Lembar Karakter2Fungsi library tabel Lainnya
table.concat()Pembuatan tabel & unpack()table.sort()Pengurutan Kustom dengan FungsiRangkuman, Papan Skor Tertinggi3Konsep Fungsi Tingkat Lanjut
Mengembalikan Beberapa NilaiFungsi Variadik (...)Fungsi sebagai Nilai Kelas SatuFungsi AnonimApa Itu Closure?Ulasan: Penangan Event Sederhana9Coroutine untuk Pemula
Apa Itu Coroutine?Membuat dan Melanjutkan CoroutineMenjeda dengan coroutine.yield()resume dan yieldMemeriksa Status CoroutineUlasan: Generator AngkaUlasan: Matematika VektorLatihan sendiri: Compiler Lua online