Menu
Coddy logo textTech

setmetatable & getmetatable

Coddy'nin Lua Journey'sinin Logic & Flow bölümünün bir parçası — ders 17 / 54.

Metatabloların kavramsal olarak ne olduğunu anladığınıza göre, onlarla gerçekte nasıl çalışacağınızı öğrenmenin zamanı geldi. Lua bunun için iki temel fonksiyon sağlar: bir tabloya metatable eklemek için setmetatable() ve onu almak için getmetatable().

Bir tabloya metatable eklemek için setmetatable() kullanırsınız. Bu fonksiyon iki argüman alır: değiştirmek istediğiniz tablo (ana tablo) ve ona eklemek istediğiniz metatable:

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 parametrelerini alan ve metatablo başarıyla eklendiyse true döndüren bir attachMetatable fonksiyonu yazın.

Metatabloyu ana tabloya eklemek için setmetatable() kullanın, ardından getmetatable() kullanarak ekleme işlemini doğrulayın.

Mantık:

  • setmetatable() kullanarak metaTablemainTable'a ekleyin
  • getmetatable() kullanarak eklenen metatabloyu alın
  • Alınan metatabloyu orijinal metaTable ile karşılaştırın
  • Eşleşiyorlarsa true, aksi takdirde false döndürün

Parametreler:

  • mainTable (table): Metatablonun ekleneceği tablo
  • metaTable (table): Eklenecek metatablo

Döndürür: Metatablo başarıyla eklendiyse ve doğrulandıysa true, aksi takdirde false (boolean)

Kopya kağıdı

Lua, metatablolarla çalışmak için iki temel fonksiyon sağlar:

setmetatable() - Bir tabloya bir metatable ekler. İki argüman alır: ana tablo ve eklenecek metatable. Ana tabloyu döndürür.

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

setmetatable(myTable, myMetatable)

getmetatable() - Bir tabloya eklenmiş olan metatable'ı alır. Eğer bir metatable ekliyse onu döndürür, tabloya ait bir metatable yoksa nil döndürür.

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

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.

Logic & Flow bölümündeki tüm dersler