Menu
Coddy logo textTech

setmetatable & getmetatable

Coddy'nin Lua Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 17 / 54.

Artık metatabloların kavramsal olarak ne olduğunu anladığına göre, onlarla pratikte nasıl çalışacağını öğrenmenin zamanı geldi. Lua bunun için iki temel işlev sağlar: bir tabloya metatablo eklemek için setmetatable() ve metatablı almak için getmetatable().

Bir tabloya bir metatablo eklemek için setmetatable() kullanırsın. Bu işlev iki bağımsız değişken alır: değiştirmek istediğin tablo (ana tablo) ve ona eklemek istediğin metatablo:

local myTable = {name = "Alice"}
local myMetatable = {}

setmetatable(myTable, myMetatable)

Bu örnekte, myMetatable artık myTable tablosuna bağlıdır. Metatablo şu an için boştur, ancak bu iki tablo arasındaki bağlantıyı kurar. setmetatable() fonksiyonu ayrıca ana tabloyu döndürür, bu da gerekirse işlemi zincirlemenize olanak tanır.

Bir tabloya eklenmiş metatabloyu almak için getmetatable() kullanırsınız:

local retrievedMeta = getmetatable(myTable)
print(retrievedMeta == myMetatable)  -- Çıktı: true

Bu fonksiyon, eğer bir tane eklenmişse metatabloyu, tablo bir metatabloya sahip değilse nil döndürür. Bu, bir tablonun metatablosu ayarlandıktan sonra onu kontrol etmeniz veya değiştirmeniz gerektiğinde yararlıdır.

Bu iki fonksiyonu anlamak, Lua'daki tüm metatablo çalışmalarının temelidir. Metatabloları ekleyip alabildiğinizde, tablolarınızın nasıl davranacağını değiştiren metayöntemleri (metamethods) tanımlamaya hazır olacaksınız.

challenge icon

Görev

Kolay

mainTable ve metaTable alan ve metatablosu başarıyla eklenirse true döndüren attachMetatable adlı bir işlev yazın.

Metatablosunu ana tabloya eklemek için setmetatable() kullanın, ardından eklemeyi getmetatable() kullanarak doğrulayın.

Mantık:

  • setmetatable() kullanarak metaTable öğesini mainTable öğesine ekleyin
  • getmetatable() kullanarak eklenen metatablosunu alın
  • Alınan metatablosunu özgün metaTable ile karşılaştırın
  • Eşleşiyorlarsa true, aksi takdirde false döndürün

Parametreler:

  • mainTable (table): Metatablosunun ekleneceği tablo
  • metaTable (table): Eklenecek metatablosu

Döndürür: Metatablosu başarıyla eklenip doğrulanırsa true, aksi takdirde false (boolean)

Kendin dene

function attachMetatable(mainTable, metaTable)
    -- 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

Kendi başına pratik yap: Online Lua derleyicisi