coroutine.yield() ile Duraklatma
Coddy'nin Lua Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 50 / 54.
coroutine.yield() fonksiyonundan gelir. Bir korutinin çalışmanın ortasında kendisini duraklatmasını ve kontrolü kendisini devam ettiren koda geri devretmesini sağlayan şey budur.Bir `coroutine` coroutine.yield() çağırdığında, tam o noktada çalışmayı hemen durdurur. Bu `coroutine` üzerinde bir sonraki coroutine.resume() çağrınızda, sanki hiçbir şey olmamış gibi tam olarak yield() çağrısının hemen sonrasından devam eder.İşte basit bir örnek:function countToThree()
print("One")
coroutine.yield()
print("Two")
coroutine.yield()
print("Three")
end
local co = coroutine.create(countToThree)
coroutine.resume(co) -- "One" yazdırır, sonra duraklar
coroutine.resume(co) -- "Two" yazdırır, sonra duraklar
coroutine.resume(co) -- "Three" yazdırır, sonra biterresume() çağrısının, coroutine'i bir yield() ifadesine ulaşana kadar nasıl çalıştırdığına dikkat edin. Coroutine, tüm yerel değişkenleri ve yürütme durumu dahil olmak üzere tam olarak nerede durduğunu hatırlar.Ayrıca yield ederken geriye değerler de döndürebilirsiniz. coroutine.yield() fonksiyonuna verdiğiniz tüm argümanlar, coroutine.resume() fonksiyonunun dönüş değerleri haline gelir. coroutine.resume() fonksiyonunun ilk değer olarak her zaman bir boolean status (coroutine hatasız çalıştıysa true veya bir hata oluştuysa false) döndürdüğünü ve ardından yield() fonksiyonuna geçirilen tüm değerlerin geldiğini unutmayın:function giveNumbers()
coroutine.yield(10)
coroutine.yield(20)
end
local co = coroutine.create(giveNumbers)
-- status true'dur, value 10'dur
local status, value = coroutine.resume(co)
print(value) -- Yazdırır: 10
-- status true'dur, value 20'dir
status, value = coroutine.resume(co)
print(value) -- Yazdırır: 20Görev
Kolaycount alan ve değerleri birden fazla kez yield eden bir coroutine çıktısını gösteren bir metin (string) döndüren bir createYieldingCoroutine fonksiyonu yazın.
1'den count değerine kadar her adım için "Step X" metnini yield eden, toplamda count adımlık bir coroutine oluşturun. Üretilen tüm değerleri toplamak için coroutine yapısını count kez resume edin. Elde edilen tüm değerleri yeni satır karakterleriyle birleştirerek döndürün.
Mantık:
countdeğerine kadar"Step 1","Step 2"vb. değerleriyieldetmek için bir döngü kullanan bir fonksiyon oluşturun- Tüm
yieldişlemlerinden sonra fonksiyon tamamlanmalıdır ("Done" için son biryieldolmamalıdır) - Bu fonksiyonu
coroutine.create()kullanarak bir coroutine ile sarmalayın - Üretilen her değeri toplayarak coroutine yapısını
countkezresumeedin - Elde edilen tüm değerleri aralarında yeni satır karakterleri olacak şekilde birleştirin
- Birleştirilen metni döndürün
Parametreler:
count(number):yieldedilecek adım sayısı
Döndürülen Değer: Yeni satırlar ile ayrılmış, üretilen tüm değerleri içeren bir metin (string). Format: Step 1\nStep 2\nStep 3
Kendin dene
function createYieldingCoroutine(count)
-- Kodu 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ği