Study
Lua

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

Editor Latihan

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.