Menu
Coddy logo textTech

resume ve yield

Coddy'nin Lua Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 51 / 54.

Önceki derste, bir coroutine'in coroutine.yield() kullanarak değerleri ana koda nasıl geri aktarabildiğini öğrendin. Ancak iletişim her iki yönde de gerçekleşebilir. Bir coroutine'i yeniden başlattığında, içine değerler de gönderebilirsin.

coroutine.resume() işlevini coroutine nesnesinden sonra ek bağımsız değişkenlerle çağırdığınızda, bu bağımsız değişkenler coroutine'e aktarılır. Coroutine içinde bu değerler, coroutine'i duraklatan coroutine.yield() çağrısının dönüş değerleri olur.

İşte nasıl çalıştığı:

function receiver()
    print("Coroutine started")
    local value = coroutine.yield()
    print("Received: " .. value)
end

local co = coroutine.create(receiver)
coroutine.resume(co)           -- Başlar ve yield'de duraklar
coroutine.resume(co, "Hello")  -- "Hello" değerini coroutine'e geçirir

Coroutine ikinci kez devam ettiğinde, "Hello" dizesi içeri aktarılır ve coroutine.yield() ifadesinin dönüş değeri olur; bu değer value değişkeninde saklanır.

challenge icon

Görev

Kolay

Ana kod ile bir coroutine arasındaki iki yönlü iletişimi gösteren bir dize döndüren ve initialMessage parametresini alan bir createEchoCoroutine fonksiyonu yazın.

İlk olarak initialMessage değerini yield eden, ardından yeniden başlatıldığında (resumed) bir yanıt alan ve son olarak bu yanıtı tekrar yield eden bir coroutine oluşturun. Fonksiyon, değerlerin coroutine dışına ve içine nasıl aktarıldığını göstermelidir.

Mantık:

  • initialMessage değerini yield eden ve bu yield işleminden dönen değeri saklayan bir fonksiyon oluşturun
  • Değeri aldıktan sonra, onu tekrar dışarıya yield edin
  • Bu fonksiyonu coroutine.create() kullanarak bir coroutine içinde sarmalayın
  • İlk mesajı almak için coroutine yapısını ilk kez resume edin
  • İçeri "Response" parametresini geçerek coroutine yapısını ikinci kez resume edin
  • İkinci resume işleminden yield edilen değeri yakalayın
  • Şu biçimde bir dize döndürün: First: [first_yield]\nSecond: [second_yield]

Parametreler:

  • initialMessage (dize): coroutine yapısının ilk olarak yield edeceği mesaj

Döndürülen Değer: Yeni bir satırla ayrılmış her iki yield edilen değeri gösteren bir dize. Biçim: First: Hello\nSecond: Response

Kendin dene

function createEchoCoroutine(initialMessage)
    -- Buraya kod 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.

Mantık ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online Lua derleyicisi