Coroutine Durumunu Kontrol Etme
Coddy'nin Lua Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 52 / 54.
Coroutine'lerle çalışırken, bir coroutine'in hangi durumda olduğunu sık sık bilmeniz gerekir. Şu anda çalışıyor mu? Duraklatılmış ve devam ettirilmeyi mi bekliyor? Yürütülmesini tamamladı mı?
Lua, bu soruları yanıtlamak için coroutine.status() fonksiyonunu sağlar.
coroutine.status() işlevi, bağımsız değişken olarak bir coroutine alır ve mevcut durumunu açıklayan bir dize döndürür. Üç olası durum vardır:
| "suspended" | Coroutine bir yield() noktasında 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 yeniden 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
KolaycheckCoroutineLifecycle adlı, resumeCount parametresini alan ve bir coroutine'in yaşam döngüsünün farklı noktalarındaki durumunu gösteren bir dize döndüren bir işlev yazın.
Bir kez yield yapan ve ardından tamamlanan bir coroutine oluşturun. Oluşturulduktan sonra, ilk resume işleminden sonra (yield noktasında duraklatıldığında) ve resumeCount temel alınarak sonraki resume işlemlerinden sonra durumunu kontrol edip kaydedin.
Mantık:
- Bir kez
"paused"dizesini yield yapan, ardından tamamlanan bir işlev oluşturun - Bu işlevi
coroutine.create()kullanarak bir coroutine içine sarın - Oluşturulduktan hemen sonraki durumu
coroutine.status()kullanarak kontrol edin - Coroutine'i bir kez resume edin ve durumunu tekrar kontrol edin
- Coroutine'i
resumeCount - 1temel alınarak ek kez resume edin (toplam resume sayısı = resumeCount) - Tüm resume işlemlerinden sonra son durumu kontrol edin
- Üç durumun tümünü şu biçimde içeren bir dize döndürün:
initial: [status]\\nafter first resume: [status]\\nfinal: [status]
Parametreler:
resumeCount(number): Coroutine'i resume etme sayısı (minimum 1)
Döndürür: Coroutine'in yaşam döngüsündeki üç noktadaki durumunu gösteren bir dize (string). Biçim: initial: suspended\nafter first resume: suspended\nfinal: 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.
Mantık ve Akış 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ğiKendi başına pratik yap: Online Lua derleyicisi