Menu
Coddy logo textTech

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

challenge icon

Görev

Kolay

createPoint 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ış x ve y anahtarlarına sahip bir tablo oluşturun
  • "Point(x, y)" biçiminde bir dize döndüren __tostring özelliğine sahip bir metatable oluşturun
  • setmetatable() 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
quiz iconKendini test et

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

Kendi başına pratik yap: Online Lua derleyicisi