Menu
Coddy logo textTech

__index Metametodu

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

Artık metatabloları tablolara nasıl ekleyeceğinizi bildiğinize göre, en önemli metametot hakkında bilgi edinme zamanı geldi: __index. Bu metametot, bir tabloda var olmayan bir anahtara erişmeye çalıştığınızda ne olacağını kontrol eder.

Normalde, bir tabloda bulunmayan bir anahtara baktığınızda, Lua nil döndürür. Ancak bir tablonun __index alanına sahip bir metatablosu varsa, Lua bunun yerine o alanı kontrol edecektir. Eğer __index başka bir tabloyu işaret ediyorsa, Lua anahtarı orada arayacaktır:

local defaults = {
    health = 100,
    speed = 10
}

local player = {name = "Alice"}
local meta = {__index = defaults}

setmetatable(player, meta)

print(player.name)    -- Çıktı: Alice
print(player.health)  -- Çıktı: 100

Bu örnekte, player sadece bir name anahtarına sahiptir. player.health değerine eriştiğinizde, Lua bunu player içinde bulamaz, bu yüzden metatablo'nun __index alanını kontrol eder. __index, defaults tablosunu işaret ettiği için Lua oraya bakar ve health = 100 değerini bulur.

Bu, bir tablonun diğeri için varsayılan değerler sağlayabildiği bir yedekleme (fallback) mekanizması oluşturur. Orijinal tablo kendi değerlerini korur, ancak eksik olan tüm anahtarlar otomatik olarak yedekleme tablosunda aranır.

challenge icon

Görev

Kolay

name ve level parametrelerini alan ve varsayılan istatistik değerlerine sahip bir karakter tablosu döndüren bir createCharacterWithDefaults fonksiyonu yazın.

Sağlanan isim ve seviye ile bir karakter tablosu oluşturun. Eksik olan herhangi bir istatistik (health, mana, strength) için varsayılan değerleri sağlamak üzere __index içeren bir metatable kullanın.

Mantık:

  • Şu anahtarlara sahip bir varsayılanlar (defaults) tablosu oluşturun: health = 100, mana = 50, strength = 10
  • Şu anahtarlara sahip bir karakter tablosu oluşturun: name (sağlanan isim) ve level (sağlanan seviye)
  • __index özelliği varsayılanlar tablosuna işaret eden bir metatable oluşturun
  • setmetatable() kullanarak metatable'ı karakter tablosuna ekleyin
  • Karakter tablosunu döndürün

Parametreler:

  • name (string): Karakterin ismi
  • level (number): Karakterin seviyesi

Döndürdüğü Değer: Metatable aracılığıyla erişilebilen isim, seviye ve varsayılan istatistikleri içeren bir karakter tablosu (table)

Kendin dene

function createCharacterWithDefaults(name, level)
    -- 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