__tostring Metametodu
Coddy'nin Lua Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 20 / 54.
Lua'da bir tabloyu yazdırdığınızda genellikle yalnızca bir bellek adresi olan table: 0x5f8a20 gibi pek yararlı olmayan bir şey görürsünüz. __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ştirmenizi sağlar.
Bu metametot, hata ayıklama ve daha temiz çıktı oluşturma için özellikle kullanışlıdır. Lua, tablonuzu bir dizeye dönüştürmesi gerektiğinde (örneğin print() kullanılırken), tablonun __tostring alanına sahip bir metatablosu olup olmadığını kontrol eder. Varsa Lua, bu işlevi çağırır ve varsayılan gösterim yerine dönüş değerini kullanır.
İşte bunu nasıl uygulayacağınız:
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 işlevi, tabloyu bağımsız değişkeni olarak alır ve bir dize döndürmelidir. Bu örnekte, vektörün x ve y değerlerini okunabilir bir biçimde gösteren biçimlendirilmiş bir dize oluşturur.
Bu, kodunuzla çalışmayı çok daha kolay hâle getirir. Hata ayıklama sırasında anlaşılması zor bellek adresleri görmek yerine, tablonuzun ne içerdiği hakkında anlamlı bilgiler elde edersiniz.
Görev
KolaycreatePoint fonksiyonunu yazın; bu fonksiyon x ve y koordinatlarını almalı ve özel bir dize gösterimine sahip bir nokta tablosu döndürmelidir.
x ve y alanlarına sahip bir tablo oluşturun, __tostring metamethod'una sahip bir metatable ekleyin ve tabloyu tostring() kullanarak dizeye dönüştürmenin sonucunu döndürün.
Mantık:
- Sağlanan koordinatlara ayarlanmış
xveyanahtarlarına sahip bir tablo oluşturun "Point(x, y)"biçiminde bir dize döndüren__tostringözelliğine sahip bir metatable oluşturunsetmetatable()kullanarak metatable'ı nokta tablosuna ekleyin- Özel dize gösterimini elde etmek için
tostring(point)döndürün
Parametreler:
x(sayı): Noktanın x koordinatıy(sayı): Noktanın y koordinatı
Döndürür: "Point(x, y)" biçiminde noktanın özel dize gösterimi (dize)
Kendin dene
function createPoint(x, y)
-- Kodu buraya yaz
end
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış 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 TablosuKendi başına pratik yap: Online Lua derleyicisi