Metatable & Metamethod
Penjelasan
Metatable adalah table KHUSUS yang bisa dipasang ke table lain lewat `setmetatable()`, berisi "metamethod" — fungsi yang mengubah perilaku default table itu. `__index` dipakai untuk implementasi inheritance (mencari field yang tidak ditemukan di table asli, dilempar ke table lain), `__add`/`__sub`/dll dipakai untuk operator overloading (mis. `objek1 + objek2`).
Contoh Konsep
local Vektor = {}
Vektor.__index = Vektor -- __index menunjuk ke diri sendiri, dasar inheritance OOP Lua
Vektor.__add = function(a, b) -- operator overloading untuk +
return { x = a.x + b.x, y = a.y + b.y }
end
function Vektor.baru(x, y)
local objek = { x = x, y = y }
return setmetatable(objek, Vektor)
end
local v1 = Vektor.baru(1, 2)
local v2 = Vektor.baru(3, 4)
local hasil = v1 + v2 -- otomatis panggil __add
print(hasil.x, hasil.y) -- 4 6
Praktikum
Buat metatable Pecahan dengan metamethod __add yang menjumlahkan dua table {pembilang, penyebut} secara sederhana (asumsikan penyebut sama).
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Pola `setmetatable(objek, Kelas)` dengan `Kelas.__index = Kelas` adalah fondasi HAMPIR SEMUA library OOP di Lua (termasuk yang dipakai game engine) — begitu paham pola ini, membaca kode OOP Lua orang lain jadi jauh lebih mudah.