Menjeda dengan coroutine.yield()
Termasuk bagian Logika dan Alur dalam perjalanan Lua di Coddy. Pelajaran 50 dari 54.
coroutine.yield(). Fungsi inilah yang memungkinkan coroutine menjeda dirinya sendiri di tengah eksekusi dan mengembalikan kendali ke kode yang melanjutkannya.Ketika coroutine memanggil coroutine.yield(), coroutine tersebut langsung berhenti pada titik itu. Saat kamu memanggil coroutine.resume() pada coroutine tersebut berikutnya, coroutine akan melanjutkan tepat setelah pemanggilan yield(), seolah-olah tidak terjadi apa-apa.Berikut contoh sederhana:function countToThree()
print("One")
coroutine.yield()
print("Two")
coroutine.yield()
print("Three")
end
local co = coroutine.create(countToThree)
coroutine.resume(co) -- Mencetak "One", lalu berhenti sejenak
coroutine.resume(co) -- Mencetak "Two", lalu berhenti sejenak
coroutine.resume(co) -- Mencetak "Three", lalu selesairesume() menjalankan coroutine hingga mencapai yield(). Coroutine mengingat persis di mana ia berhenti, termasuk semua variabel lokal dan status eksekusinya.Kamu juga bisa mengirimkan nilai kembali saat melakukan yield. Argumen apa pun yang kamu berikan ke coroutine.yield() menjadi nilai yang dikembalikan oleh coroutine.resume(). Perhatikan bahwa coroutine.resume() selalu mengembalikan nilai boolean status sebagai nilai pertamanya (true jika coroutine berjalan tanpa error, atau false jika terjadi error), diikuti nilai apa pun yang dikirimkan ke yield():function giveNumbers()
coroutine.yield(10)
coroutine.yield(20)
end
local co = coroutine.create(giveNumbers)
-- status bernilai true, value bernilai 10
local status, value = coroutine.resume(co)
print(value) -- Mencetak: 10
-- status bernilai true, value bernilai 20
status, value = coroutine.resume(co)
print(value) -- Mencetak: 20Tantangan
MudahTulis fungsi createYieldingCoroutine yang menerima count dan mengembalikan string yang menampilkan output dari coroutine yang menghasilkan nilai beberapa kali.
Buat coroutine yang menghasilkan string "Step X" untuk setiap langkah dari 1 hingga count, dengan total count langkah. Lanjutkan coroutine sebanyak count kali untuk mengumpulkan semua nilai yang dihasilkan. Kembalikan semua nilai yang dihasilkan dengan menggabungkannya menggunakan baris baru.
Logika:
- Buat fungsi yang menggunakan perulangan untuk menghasilkan
"Step 1","Step 2", dan seterusnya, hinggacount - Setelah semua nilai dihasilkan, fungsi harus selesai (tanpa menghasilkan nilai terakhir untuk "Done")
- Bungkus fungsi ini dalam coroutine menggunakan
coroutine.create() - Lanjutkan coroutine sebanyak
countkali, sambil mengumpulkan setiap nilai yang dihasilkan - Gabungkan semua nilai yang dihasilkan dengan karakter baris baru di antaranya
- Kembalikan string yang telah digabungkan
Parameter:
count(number): Jumlah langkah yang akan dihasilkan
Nilai kembali: String yang berisi semua nilai yang dihasilkan dan dipisahkan oleh baris baru (string). Format: Step 1\nStep 2\nStep 3
Coba sendiri
function createYieldingCoroutine(count)
-- Tulis kodemu di sini
end
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Iterasi Tabel Tingkat Lanjut
Iterasi dengan pairs()Iterasi dengan ipairs()pairs() vs. ipairs()Rangkuman: Lembar Karakter2Fungsi library tabel Lainnya
table.concat()Pembuatan tabel & unpack()table.sort()Pengurutan Kustom dengan FungsiRangkuman, Papan Skor Tertinggi3Konsep Fungsi Tingkat Lanjut
Mengembalikan Beberapa NilaiFungsi Variadik (...)Fungsi sebagai Nilai Kelas SatuFungsi AnonimApa Itu Closure?Ulasan: Penangan Event Sederhana9Coroutine untuk Pemula
Apa Itu Coroutine?Membuat dan Melanjutkan CoroutineMenjeda dengan coroutine.yield()resume dan yieldMemeriksa Status CoroutineUlasan: Generator AngkaUlasan: Matematika VektorLatihan sendiri: Compiler Lua online