Menu
CoddyTech

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: true

Fungsi 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.

challenge icon

Tantangan

Mudah

Tulis 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 metaTable ke mainTable menggunakan setmetatable()
  • Ambil metatable yang dipasang menggunakan getmetatable()
  • Bandingkan metatable yang diambil dengan metaTable asli
  • Kembalikan true jika keduanya cocok, false jika tidak

Parameter:

  • mainTable (table): Tabel tempat metatable akan dipasang
  • metaTable (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
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler Lua online