Menu
Coddy logo textTech

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ı)
challenge icon

Görev

Kolay

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 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 - 1 değ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 bir yield() 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
quiz iconKendini test et

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