Apa Itu Upvalue?
Pahami cara closure menangkap variabel sebagai upvalue dari scope yang melingkupinya.
Apa Itu Upvalue? adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.
Ringkasan Closure
Closure adalah fungsi yang dibundel bersama referensi ke variabel dari lingkup yang membungkusnya. Variabel yang ditangkap tersebut disebut upvalue.
Contoh Upvalue
Fungsi dalam menangkap count dari lingkup fungsi luar.
local function makeCounter()
local count = 0
return function()
count = count + 1
return count
end
end
local next = makeCounter()
print(next()) -- 1
print(next()) -- 2Upvalue Adalah Variabel yang Tetap Aktif
Upvalue bukan salinan—upvalue adalah referensi ke variabel. Fungsi penutup dapat membaca dan menulisnya.
Beberapa Upvalue
Sebuah fungsi penutup dapat menangkap beberapa variabel dari beberapa lingkup yang membungkusnya.
local function adder(x)
return function(y) return x + y end
end
local add5 = adder(5)
print(add5(3)) -- 8Masa Hidup Upvalue
Upvalue tetap ada selama masih ada fungsi penutup yang merujuknya. Upvalue baru dikumpulkan oleh pengumpul sampah setelah semua fungsi penutup yang merujuknya dikumpulkan.
debug.getupvalue
Anda dapat memeriksa upvalue dengan debug.getupvalue(fn, n), yang mengembalikan nama dan nilai upvalue ke-n.
local x = 10
local function f() return x end
print(debug.getupvalue(f, 1)) -- x 10Upvalue vs. Global
Upvalue (variabel lokal yang ditangkap oleh fungsi penutup) lebih cepat daripada variabel global. VM mengaksesnya secara langsung melalui indeks tanpa pencarian tabel.
Upvalue Tertutup
Ketika blok yang membungkusnya selesai, upvalue menjadi tertutup: dipindahkan dari tumpukan ke heap. Fungsi penutup tetap berbagi sel di heap ini.
Upvalue Terbuka vs. Tertutup
Terbuka: upvalue masih berada di tumpukan (fungsi yang membungkusnya masih berjalan). Tertutup: upvalue dipindahkan ke heap saat lingkup yang membungkusnya berakhir.
Penerapan Praktis
Upvalue secara alami menerapkan keadaan privat dalam fungsi penutup—fungsi modul dapat menyimpan keadaan privat tanpa mengeksposnya secara global.
local id = 0
local function newId()
id = id + 1
return id
endBatas Jumlah Upvalue
Setiap fungsi Lua dapat merujuk hingga 255 upvalue. Dalam praktiknya, hal ini jarang menjadi masalah.
Pertanyaan tentang Upvalue
Apa itu upvalue?
Ringkasan: Upvalue
Upvalue adalah variabel luar yang ditangkap oleh fungsi penutup. Upvalue tetap berada di heap setelah lingkup yang membungkusnya berakhir, dibagikan melalui referensi, dan menyediakan keadaan privat yang dapat diubah tanpa variabel global.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Apa Itu Upvalue?” gratis?
Ya — teks lengkap “Apa Itu Upvalue?” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Apa Itu Upvalue?”?
Pahami cara closure menangkap variabel sebagai upvalue dari scope yang melingkupinya. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Lua Academy?
Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Apa Itu Upvalue?” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?
Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Apa Itu Upvalue?
- Upvalue Bersama di antara Closure
- Fungsi Factory dan Generator
- Memoisasi dengan Closure