Coroutine Durumunu Kontrol Etme
Coddy'nin Lua Journey'sinin Logic & Flow bölümünün bir parçası — ders 52 / 54.
Coroutinelerle çalışırken, bir coroutine'in hangi durumda olduğunu sık sık bilmeniz gerekecektir. Şu anda çalışıyor mu? Duraklatıldı mı ve devam ettirilmeyi mi bekliyor? Yürütülmesi bitti mi?
Lua, bu soruları yanıtlamak için coroutine.status() fonksiyonunu sağlar.
coroutine.status() fonksiyonu, argüman olarak bir coroutine alır ve mevcut durumunu açıklayan bir dize döndürür. Üç olası durum vardır:
| "suspended" | Coroutine bir yield() ifadesinde duraklatılmıştır ve devam ettirilebilir |
| "running" | Coroutine şu anda yürütülüyor |
| "dead" | Coroutine yürütmeyi bitirdi ve tekrar devam ettirilemez |
Şu şekilde kullanabilirsiniz:
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" (yield noktasında duraklatıldı)
coroutine.resume(co)
print(coroutine.status(co)) -- "dead" (tamamlandı)Görev
KolayresumeCount parametresini alan ve bir coroutine'in yaşam döngüsünün farklı noktalarındaki durumunu gösteren bir dize döndüren checkCoroutineLifecycle fonksiyonunu yazın.
Bir kez yield eden ve ardından tamamlanan bir coroutine oluşturun. Oluşturulduktan sonra, ilk resume işleminden sonra (yield noktasında duraklatıldığında) ve resumeCount değerine bağlı olarak sonraki resume işlemlerinden sonra durumunu kontrol edin ve kaydedin.
Mantık:
- Bir kez
"paused"dizesini yield eden ve ardından tamamlanan bir fonksiyon oluşturun - Bu fonksiyonu
coroutine.create()kullanarak bir coroutine içine sarın - Oluşturulduktan hemen sonra
coroutine.status()kullanarak durumu kontrol edin - Coroutine'i bir kez resume edin ve durumunu tekrar kontrol edin
resumeCount - 1değerine bağlı olarak coroutine'i ek kez resume edin (toplam resume sayısı = resumeCount)- Tüm resume işlemlerinden sonra final durumunu kontrol edin
- Her üç durumu şu formatta bir dize olarak döndürün:
initial: [status]\\nafter first resume: [status]\\nfinal: [status]
Parametreler:
resumeCount(sayı): Coroutine'in toplam resume edilme sayısı (minimum 1)
Döndürür: Coroutine durumunu yaşam döngüsünün üç noktasında gösteren bir dize (string). Format: initial: suspended\nafter first resume: suspended\nfinal: dead
Kopya kağıdı
coroutine.status() fonksiyonu, bir coroutine'in mevcut durumunu bir dize (string) olarak döndürür.
Olası durumlar:
"suspended"- Coroutine biryield()ifadesinde duraklatılmıştır ve devam ettirilebilir"running"- Coroutine şu anda yürütülüyor"dead"- Coroutine yürütmeyi tamamlamıştır ve devam ettirilemez
Kullanım:
coroutine.status(coroutine_object)Örnek:
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"
coroutine.resume(co)
print(coroutine.status(co)) -- "dead"Kendin dene
function checkCoroutineLifecycle(resumeCount)
-- Kodunuzu buraya yazın
end
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Logic & Flow bölümündeki tüm dersler
1İleri Düzey Tablo Yineleme
pairs() ile Yinelemeipairs() ile Yinelemepairs() vs. ipairs()Özet - Karakter Sayfası2Daha Fazla Tablo Kütüphanesi Fonksiyonu
table.concat()Tablo Oluşturma ve unpack()table.sort()Fonksiyonlar ile Özel SıralamaÖzet - Yüksek Skor Tablosu3İleri Düzey Fonksiyon Kavramları
Birden Fazla Değer DöndürmeVariadic Fonksiyonlar (...)Birinci Sınıf Değer Olarak FonksiyonlarAnonim FonksiyonlarClosure Nedir?Özet - Basit Event Handler9Yeni Başlayanlar İçin Coroutine'ler
Coroutine Nedir?coroutine create ve resumecoroutine.yield() ile Duraklatmaresume ve yieldCoroutine Durumunu Kontrol EtmeÖzet - Sayı ÜreticiÖzet - Vektör Matematiği