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, hiçbir şey olmamış gibi yield() çağrısının hemen ardı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, korutin bir yield() ifadesine ulaşana kadar çalıştırdığını fark edin. Korutin, tüm yerel değişkenleri ve yürütme durumu da dâhil olmak üzere tam olarak nerede durduğunu hatırlar.Yielding sırasında değerleri geri de gönderebilirsiniz. coroutine.yield() işlevine verdiğiniz tüm bağımsız değişkenler, coroutine.resume() işlevinin dönüş değerleri olur. coroutine.resume() işlevinin ilk değer olarak her zaman bir boolean status döndürdüğünü unutmayın (true, coroutine'in hatasız çalıştığını; false ise bir hata oluştuğunu belirtir); bunu, yield() işlevine aktarılan değerler izler: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 birden çok kez değer veren bir coroutine'in çıktısını gösteren bir dize döndüren createYieldingCoroutine işlevini yazın.
1'den count'a kadar her adım için "Step X" dizesini veren ve toplam count adım gerçekleştiren bir coroutine oluşturun. Tüm verilen değerleri toplamak için coroutine'i count kez devam ettirin. Verilen tüm değerleri yeni satırlarla birleştirerek döndürün.
Mantık:
"Step 1","Step 2"vb. değerlericount'a kadar vermek için döngü kullanan bir işlev oluşturun- Tüm değerler verildikten sonra işlev tamamlanmalıdır ("Done" için son bir değer verilmemelidir)
- Bu işlevi
coroutine.create()kullanarak bir coroutine içine sarın - Coroutine'i
countkez devam ettirerek verilen her değeri toplayın - Verilen tüm değerleri aralarına yeni satır karakterleri koyarak birleştirin
- Birleştirilmiş dizeyi döndürün
Parametreler:
count(number): Verilecek adım sayısı
Döndürür: Yeni satırlarla ayrılmış tüm verilen değerleri içeren bir dize (string). Biçim: 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ğiKendi başına pratik yap: Online Lua derleyicisi