Menu
Coddy logo textTech

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

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)

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
quiz iconKendini test et

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