Zayıf Anahtarlar ve Zayıf Değerler
Önbellek benzeri yapılar için __mode='k', 'v' veya 'kv' ile zayıf tablolar oluşturun.
Zayıf Anahtarlar ve Zayıf Değerler, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.
Zayıf Tablolar Nedir?
Zayıf tablo, çöp toplamayı engellemeyen başvurular barındırır. Zayıf tablolardaki nesneler, tablo varlığını sürdürürken bile toplanabilir.
__mode Metamethod'u
Zayıflığı denetlemek için metatablo üzerinde __mode ayarlayın: zayıf anahtarlar için "k", zayıf değerler için "v", her ikisi için "kv".
local weakValues = setmetatable({}, {__mode = "v"})
local weakKeys = setmetatable({}, {__mode = "k"})Zayıf Değerler Örneği
Başka hiçbir başvuru kalmadığında değerlerinin toplanabildiği bir önbellek.
local cache = setmetatable({}, {__mode = "v"})
local function getObject(key)
if not cache[key] then
cache[key] = {data = key} -- expensive to create
end
return cache[key]
endGC Sonrasında Zayıf Değerler Kaybolur
Bir nesneye yönelik tek başvuru zayıf değerli bir tabloda kaldığında GC nesneyi toplar ve girdi kaybolur.
local t = setmetatable({}, {__mode = "v"})
do
local obj = {}
t[1] = obj
print(t[1]) -- table: 0x...
end
collectgarbage()
print(t[1]) -- nil (collected)Zayıf Anahtarlar Örneği
Zayıf anahtarlar, toplanmalarını engellemeden nesnelerle meta verileri ilişkilendirmenizi sağlar. Anahtar nesne toplandığında girdi kaldırılır.
local meta = setmetatable({}, {__mode = "k"})
local function attachMeta(obj, data)
meta[obj] = data
endNesne Açıklama Deseni
Zayıf anahtarlı bir tablo kullanarak nesnelere ek veriler ek açıklama olarak ekleyin. Nesne GC tarafından toplandığında açıklama otomatik olarak kaldırılır.
local annotations = setmetatable({}, {__mode = "k"})
annotations[myObj] = {created = os.time(), owner = "Alice"}
print(annotations[myObj].owner)Zayıf Anahtar ve Değer Tabloları
"kv" tablosu hem zayıf anahtarlara hem de zayıf değerlere sahiptir. Yalnızca canlı olan (başka yerlerde başvurulan) anahtarlar girdilerini korur.
Ephemeron Tabloları
Lua 5.2 ve sonraki sürümlerde zayıf anahtarlı tablolar ephemeron'dur: değere yönelik tek başvuru anahtar üzerinden geçiyorsa ikisi birlikte toplanır. Bu, beklenmedik saklamayı önler.
Zayıf Değerlerle Önbellek Deseni
Standart kullanım alanı şudur: bellek gerektiğinde, elle silme işlemi olmadan önbelleğe alınmış sonuçları serbest bırakan bir notlandırma önbelleği.
local function weakMemo(fn)
local cache = setmetatable({}, {__mode = "v"})
return function(x)
if not cache[x] then cache[x] = fn(x) end
return cache[x]
end
endSınırlamalar
Zayıf tablolar ilkel türleri (sayılar, boolean değerleri, dizeler) zayıf değerler olarak barındıramaz; bunlar GC tarafından toplanamaz (dizeler stajlanır).
Zayıf Tablolar Ne Zaman Kullanılmalı?
- Baskı altında belleği serbest bırakması gereken nesne önbellekleri.
- Harici nesnelerle meta veri ilişkilendirme.
- Özel nesneler için staj tabloları uygulama.
Zayıf Tablo Sorusu
Bir metatablo üzerinde __mode = "v" ayarlamak ne yapar?
Özet: Zayıf Anahtarlar ve Değerler
Zayıf tablolar, GC'nin anahtarlarını/değerlerini toplamasına izin vermek için __mode = "k", "v" veya "kv" kullanır. Bu, bellek açısından güvenli önbellekler ve nesne açıklama desenleri için gereklidir.
Sıkça Sorulan Sorular
“Zayıf Anahtarlar ve Zayıf Değerler” dersi ücretsiz mi?
Evet — “Zayıf Anahtarlar ve Zayıf Değerler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.
“Zayıf Anahtarlar ve Zayıf Değerler” dersinde ne öğreneceğim?
Önbellek benzeri yapılar için __mode='k', 'v' veya 'kv' ile zayıf tablolar oluşturun. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Lua Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Zayıf Anahtarlar ve Zayıf Değerler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Lua Çöp Toplayıcısına Giriş
- Zayıf Anahtarlar ve Zayıf Değerler
- __gc ile Sonlandırıcılar
- Bellek Sızıntılarından Kaçınma