setmetatable & getmetatable
Termasuk bagian Logika dan Alur dalam perjalanan Lua di Coddy. Pelajaran 17 dari 54.
Sekarang setelah kamu memahami konsep metatable, saatnya belajar cara menggunakannya. Lua menyediakan dua fungsi penting untuk ini: setmetatable() untuk memasang metatable pada tabel, dan getmetatable() untuk mengambilnya.
Untuk memasang metatable pada tabel, gunakan setmetatable(). Fungsi ini menerima dua argumen: tabel yang ingin kamu ubah (tabel utama) dan metatable yang ingin kamu pasang padanya:
local myTable = {name = "Alice"}
local myMetatable = {}
setmetatable(myTable, myMetatable)Dalam contoh ini, myMetatable kini terpasang pada myTable. Metatable itu sendiri masih kosong, tetapi ini membentuk hubungan antara kedua tabel tersebut. Fungsi setmetatable() juga mengembalikan tabel utama, sehingga kamu bisa merangkai operasi ini jika perlu.
Untuk mengambil metatable yang terpasang pada tabel, kamu menggunakan getmetatable():
local retrievedMeta = getmetatable(myTable)
print(retrievedMeta == myMetatable) -- output: trueFungsi ini mengembalikan metatable jika ada yang terpasang, atau nil jika tabel tidak memiliki metatable. Ini berguna saat kamu perlu memeriksa atau mengubah metatable tabel setelah metatable tersebut ditetapkan.
Memahami dua fungsi ini adalah dasar untuk semua pekerjaan metatable di Lua. Setelah kamu dapat memasang dan mengambil metatable, kamu siap mendefinisikan metamethod yang mengubah perilaku tabelmu.
Tantangan
MudahTulis fungsi attachMetatable yang menerima mainTable dan metaTable, lalu mengembalikan true jika metatable berhasil dipasang.
Gunakan setmetatable() untuk memasang metatable ke tabel utama, lalu verifikasi pemasangannya menggunakan getmetatable().
Logika:
- Pasang
metaTablekemainTablemenggunakansetmetatable() - Ambil metatable yang dipasang menggunakan
getmetatable() - Bandingkan metatable yang diambil dengan
metaTableasli - Kembalikan
truejika keduanya cocok,falsejika tidak
Parameter:
mainTable(table): Tabel tempat metatable akan dipasangmetaTable(table): Metatable yang akan dipasang
Nilai kembali: true jika metatable berhasil dipasang dan diverifikasi, false jika tidak (boolean)
Coba sendiri
function attachMetatable(mainTable, metaTable)
-- 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 Karakter4Pengenalan Metatable
Apa Itu Metatable?setmetatable & getmetatableMetamethod __indexMetamethod __newindexMetamethod __tostringMetamethod Aritmetika Bagian 1Metamethod Aritmetika Bagian 2Ulasan: Tabel Hanya-Baca2Fungsi library tabel Lainnya
table.concat()Pembuatan tabel & unpack()table.sort()Pengurutan Kustom dengan FungsiRangkuman, Papan Skor TertinggiLatihan sendiri: Compiler Lua online