resume dan yield
Termasuk bagian Logika dan Alur dalam perjalanan Lua di Coddy. Pelajaran 51 dari 54.
Pada pelajaran sebelumnya, kamu telah mempelajari cara coroutine meneruskan nilai kembali ke kode utama menggunakan coroutine.yield(). Namun, komunikasi dapat mengalir ke dua arah. Kamu juga dapat mengirim nilai ke dalam coroutine saat kamu melanjutkannya.
Saat kamu memanggil coroutine.resume() dengan argumen tambahan setelah object coroutine, argumen tersebut diteruskan ke dalam coroutine. Di dalam coroutine, nilai-nilai ini menjadi nilai yang dikembalikan oleh pemanggilan coroutine.yield() yang menjeda coroutine tersebut.
Begini cara kerjanya:
function receiver()
print("Coroutine started")
local value = coroutine.yield()
print("Received: " .. value)
end
local co = coroutine.create(receiver)
coroutine.resume(co) -- Memulai dan berhenti sementara di yield
coroutine.resume(co, "Hello") -- Meneruskan "Hello" ke coroutineSaat coroutine dilanjutkan untuk kedua kalinya, string "Hello" diteruskan dan menjadi nilai kembalian dari coroutine.yield(), yang disimpan dalam variabel value.
Tantangan
MudahTulis fungsi createEchoCoroutine yang menerima initialMessage dan mengembalikan string yang menunjukkan komunikasi dua arah antara kode utama dan coroutine.
Buat coroutine yang pertama-tama mengeluarkan initialMessage, lalu menerima respons saat dilanjutkan, dan akhirnya mengeluarkan respons tersebut kembali. Fungsi ini harus menunjukkan cara mengirim nilai keluar dari dan masuk ke coroutine.
Logika:
- Buat fungsi yang mengeluarkan
initialMessagedan menyimpan nilai yang dikembalikan dari yield tersebut - Setelah menerima nilai, keluarkan nilai tersebut kembali
- Bungkus fungsi ini dalam coroutine menggunakan
coroutine.create() - Lanjutkan coroutine untuk pertama kalinya guna mendapatkan pesan awal
- Lanjutkan coroutine untuk kedua kalinya, dengan meneruskan
"Response" - Simpan nilai yang dikeluarkan dari proses pelanjutan kedua
- Kembalikan string dengan format:
First: [first_yield]\nSecond: [second_yield]
Parameter:
initialMessage(string): Pesan yang akan dikeluarkan coroutine pertama kali
Nilai yang dikembalikan: String yang menampilkan kedua nilai yang dikeluarkan dan dipisahkan oleh baris baru (string). Format: First: Hello\nSecond: Response
Coba sendiri
function createEchoCoroutine(initialMessage)
-- 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 TertinggiLatihan sendiri: Compiler Lua online