Menu
CoddyTech

Metamethod __tostring

Termasuk bagian Logika dan Alur dalam perjalanan Lua di Coddy. Pelajaran 20 dari 54.

Saat kamu mencetak tabel di Lua, biasanya kamu melihat sesuatu yang tidak membantu seperti table: 0x5f8a20, hanya alamat memori. Metamethod __tostring memungkinkan kamu mengubah perilaku ini dengan menentukan secara persis apa yang harus ditampilkan saat tabelmu diubah menjadi string.

Metamethod ini sangat berguna untuk debug dan membuat output yang lebih rapi. Saat Lua perlu mengonversi tabelmu menjadi string (seperti saat menggunakan print()), Lua memeriksa apakah tabel tersebut memiliki metatable dengan field __tostring. Jika ada, Lua memanggil fungsi tersebut dan menggunakan nilai yang dikembalikannya sebagai pengganti representasi default.

Berikut cara mengimplementasikannya:

local vector = {x = 3, y = 4}
local meta = {
    __tostring = function(t)
        return "Vector(" .. t.x .. ", " .. t.y .. ")"
    end
}

setmetatable(vector, meta)

print(vector)  -- output: Vector(3, 4)

Fungsi __tostring menerima tabel sebagai argumennya dan harus mengembalikan string. Dalam contoh ini, fungsi tersebut menyusun string berformat yang menampilkan nilai x dan y pada vektor dengan format yang mudah dibaca.

Ini membuat kodemu jauh lebih mudah dikelola. Alih-alih melihat alamat memori yang sulit dipahami saat debug, kamu mendapatkan informasi bermakna tentang isi tabelmu.

challenge icon

Tantangan

Mudah

Tulis fungsi createPoint yang menerima koordinat x dan y, lalu mengembalikan tabel titik dengan representasi string kustom.

Buat tabel dengan field x dan y, pasangkan metatable dengan metamethod __tostring, lalu kembalikan hasil konversi tabel menjadi string menggunakan tostring().

Logika:

  • Buat tabel dengan kunci x dan y yang nilainya diatur ke koordinat yang diberikan
  • Buat metatable dengan __tostring yang mengembalikan string dengan format "Point(x, y)"
  • Pasangkan metatable ke tabel titik menggunakan setmetatable()
  • Kembalikan tostring(point) untuk mendapatkan representasi string kustom

Parameter:

  • x (number): Koordinat x titik
  • y (number): Koordinat y titik

Nilai yang dikembalikan: Representasi string kustom titik dengan format "Point(x, y)" (string)

Coba sendiri

function createPoint(x, y)
    -- 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