__tostring Metametodu
Coddy'nin Lua Journey'sinin Logic & Flow bölümünün bir parçası — ders 20 / 54.
Lua'da bir tabloyu yazdırdığınızda, genellikle table: 0x5f8a20 gibi yardımcı olmayan bir şey görürsünüz—sadece bir bellek adresi. __tostring metametodu, tablonuz bir dizeye dönüştürüldüğünde tam olarak neyin görüntülenmesi gerektiğini tanımlayarak bu davranışı değiştirmenize olanak tanır.
Bu metametot, özellikle hata ayıklama ve daha temiz çıktılar oluşturmak için kullanışlıdır. Lua, tablonuzu bir dizeye dönüştürmesi gerektiğinde (örneğin print() kullanırken olduğu gibi), tablonun __tostring alanına sahip bir metatablosu olup olmadığını kontrol eder. Eğer varsa, Lua bu fonksiyonu çağırır ve varsayılan gösterim yerine onun dönüş değerini kullanır.
İşte nasıl uygulanacağı:
local vector = {x = 3, y = 4}
local meta = {
__tostring = function(t)
return "Vector(" .. t.x .. ", " .. t.y .. ")"
end
}
setmetatable(vector, meta)
print(vector) -- Çıktı: Vector(3, 4)__tostring fonksiyonu, tabloyu argüman olarak alır ve bir dize döndürmelidir. Bu örnekte, vektörün x ve y değerlerini okunabilir bir formatta gösteren biçimlendirilmiş bir dize oluşturur.
Bu, kodunuzla çalışmayı çok daha kolaylaştırır. Hata ayıklama sırasında gizemli bellek adresleri görmek yerine, tablonuzun neler içerdiğine dair anlamlı bilgiler alırsınız.
Görev
Kolayx ve y koordinatlarını alan ve özel bir dize gösterimine sahip bir nokta tablosu döndüren bir createPoint fonksiyonu yazın.
x ve y alanlarına sahip bir tablo oluşturun, __tostring metametodu ile bir metatablo ekleyin ve tostring() kullanarak tabloyu bir dizeye dönüştürmenin sonucunu döndürün.
Mantık:
- Anahtarları
xveyolan ve sağlanan koordinatlara ayarlanmış bir tablo oluşturun "Point(x, y)"formatında bir dize döndüren__tostringiçeren bir metatablo oluşturunsetmetatable()kullanarak metatabloyu nokta tablosuna ekleyin- Özel dize gösterimini elde etmek için
tostring(point)değerini döndürün
Parametreler:
x(sayı): Noktanın x koordinatıy(sayı): Noktanın y koordinatı
Döndürür: "Point(x, y)" formatında noktanın özel dize gösterimi (string)
Kopya kağıdı
__tostring metametodu, bir tablo bir stringe dönüştürüldüğünde nasıl görüntüleneceğini özelleştirmenize olanak tanır. Varsayılan olarak, bir tabloyu yazdırmak table: 0x5f8a20 gibi bir bellek adresi gösterir.
Lua bir tabloyu bir stringe dönüştürdüğünde (örneğin print() ile), tablonun __tostring alanına sahip bir metatablosu olup olmadığını kontrol eder. Eğer varsa, Lua bu fonksiyonu çağırır ve dönen değerini kullanır.
__tostring fonksiyonu, tabloyu argüman olarak alır ve bir string döndürmelidir:
local vector = {x = 3, y = 4}
local meta = {
__tostring = function(t)
return "Vector(" .. t.x .. ", " .. t.y .. ")"
end
}
setmetatable(vector, meta)
print(vector) -- Çıktı: Vector(3, 4)Ayrıca, tanımlanmışsa __tostring metametodunu çağıracak olan tostring() fonksiyonunu kullanarak bir tabloyu açıkça bir stringe dönüştürebilirsiniz.
Kendin dene
function createPoint(x, y)
-- Kodunuzu buraya yazın
end
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Logic & Flow bölümündeki tüm dersler
1İleri Düzey Tablo Yineleme
pairs() ile Yinelemeipairs() ile Yinelemepairs() vs. ipairs()Özet - Karakter Sayfası4Metatable'lara Giriş
Metatable Nedir?setmetatable & getmetatable__index Metametodu__newindex Metametodu__tostring MetametoduAritmetik Metametotlar Bölüm 1Aritmetik Metametotlar Bölüm 2Özet - Salt Okunur Tablo2Daha Fazla Tablo Kütüphanesi Fonksiyonu
table.concat()Tablo Oluşturma ve unpack()table.sort()Fonksiyonlar ile Özel SıralamaÖzet - Yüksek Skor Tablosu