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 başka bir tablo için varsayılan değerler sağlayabildiği bir geri dönüş mekanizması oluşturur. Özgün tablo kendi değerlerini korur, ancak eksik anahtarlar otomatik olarak geri dönüş tablosunda aranır.

challenge icon

Görev

Kolay

createCharacterWithDefaults adlı bir işlev yazın; bu işlev name ve level değerlerini almalı ve varsayılan istatistik değerlerine sahip bir karakter tablosu döndürmelidir.

Sağlanan ad ve seviye ile bir karakter tablosu oluşturun. Eksik istatistikler (health, mana, strength) için varsayılan değerler sağlamak üzere __index içeren bir metatablo kullanın.

Mantık:

  • health = 100, mana = 50 ve strength = 10 anahtarlarını içeren bir varsayılanlar tablosu oluşturun
  • name (sağlanan ad) ve level (sağlanan seviye) anahtarlarını içeren bir karakter tablosu oluşturun
  • Varsayılanlar tablosunu gösteren __index içeren bir metatablo oluşturun
  • setmetatable() kullanarak metatablosunu karakter tablosuna ekleyin
  • Karakter tablosunu döndürün

Parametreler:

  • name (string): Karakterin adı
  • level (number): Karakterin seviyesi

Döndürür: Metatablo aracılığıyla erişilebilen ad, seviye ve varsayılan istatistiklere sahip 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

Kendi başına pratik yap: Online Lua derleyicisi