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.
Tantangan
MudahTulis 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
xdanyyang nilainya diatur ke koordinat yang diberikan - Buat metatable dengan
__tostringyang 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 titiky(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
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