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

challenge icon

Görev

Kolay

x 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ı x ve y olan ve sağlanan koordinatlara ayarlanmış bir tablo oluşturun
  • "Point(x, y)" formatında bir dize döndüren __tostring içeren bir metatablo oluşturun
  • setmetatable() 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)

Kendin dene

function createPoint(x, y)
    -- Kodunuzu buraya yazın
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