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 ana koda nasıl değer döndürebildiğini öğrendiniz. Ancak iletişim her iki yönde de akabilir. Bir coroutine'i devam ettirdiğinizde (resume ettiğinizde) onun içine de değerler gönderebilirsiniz.
coroutine.resume() fonksiyonunu coroutine nesnesinden sonra ek bağımsız değişkenlerle çağırdığınızda, bu bağımsız değişkenler coroutine içine aktarılır. Coroutine içinde bu değerler, onu duraklatan coroutine.yield() çağrısının return değerleri haline gelir.
İş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çirirCoroutine ikinci kez devam ettirildiğinde (resume), "Hello" dizesi iletilir ve coroutine.yield() fonksiyonunun dönüş değeri haline gelerek value değişkeninde saklanır.
Görev
KolayAna 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:
initialMessagedeğeriniyieldeden ve buyieldişleminden dönen değeri saklayan bir fonksiyon oluşturun- Değeri aldıktan sonra, onu tekrar dışarıya
yieldedin - Bu fonksiyonu
coroutine.create()kullanarak bircoroutineiçinde sarmalayın - İlk mesajı almak için
coroutineyapısını ilk kezresumeedin - İçeri
"Response"parametresini geçerekcoroutineyapısını ikinci kezresumeedin - İkinci
resumeişlemindenyieldedilen değeri yakalayın - Şu biçimde bir dize döndürün:
First: [first_yield]\nSecond: [second_yield]
Parametreler:
initialMessage(dize):coroutineyapısının ilk olarakyieldedeceğ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
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ği