Kapanışlar Arasında Paylaşılan Upvalue'lar
Birden çok kapanışın aynı upvalue'ı paylaşmasını ve değişiklik etkilerini öğrenin.
Kapanışlar Arasında Paylaşılan Upvalue'lar, 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.
Aynı Üstdeğeri Paylaşma
Aynı kapsamda tanımlanan iki kapanım, tamamen aynı üstdeğer hücresini paylaşabilir. Birinin yaptığı değişiklikleri diğeri de görür.
local function makeGetterSetter()
local value = 0
local function get() return value end
local function set(v) value = v end
return get, set
end
local get, set = makeGetterSetter()
set(42)
print(get()) -- 42Paylaşımın Nedeni
Lua, her kapanım için üstdeğerleri kopyalamaz. Aynı blokta oluşturulan ve aynı yerel değişkene işaret eden tüm kapanımlar tek bir üstdeğer hücresini paylaşır.
Paylaşılan Üstdeğerle Gözlemci Deseni
Paylaşılan bir üstdeğer, birden çok kapanım arasında ileti aktarım kanalı görevi görebilir.
local count = 0
local inc = function() count = count + 1 end
local dec = function() count = count - 1 end
local get = function() return count end
inc(); inc(); dec()
print(get()) -- 1Döngü Değişkeni Tuzakları
Bir numeric for döngüsünde her yineleme yeni bir yerel döngü değişkeni oluşturur; bu nedenle kapanımlar birbirinden bağımsız üstdeğerleri yakalar.
local fns = {}
for i = 1, 3 do
fns[i] = function() return i end
end
print(fns[1](), fns[2](), fns[3]()) -- 1 2 3 (each closure has its own i)while Döngüsü Değişkeni Tuzakları
Bir while döngüsünde, değişen tek bir değişkeni kapanım kapsamına alırsanız tüm kapanımlar aynı üstdeğeri paylaşır ve son değeri görür.
local fns = {}
local i = 0
while i < 3 do
i = i + 1
fns[i] = function() return i end -- all share same i!
end
print(fns[1]()) -- 3 (not 1!)Yeni Bir Yerel Değişken Yakalama
Bir while döngüsünde birbirinden bağımsız değerleri yakalamak için döngü gövdesinin içinde yeni bir yerel değişken tanımlayın.
local fns = {}
local i = 0
while i < 3 do
i = i + 1
local ci = i -- new local per iteration
fns[i] = function() return ci end
end
print(fns[1]()) -- 1, fns[2]() == 2Paylaşılan Durum Modülü Deseni
Bir modül, üstdeğerler aracılığıyla özel bir durum tablosunu paylaşan birden çok işlev sunabilir.
local function makeStack()
local data = {}
return {
push = function(v) data[#data+1] = v end,
pop = function() local v = data[#data]; data[#data]=nil; return v end,
size = function() return #data end,
}
endDiğer Adlandırma ve Değiştirme
Dikkatli olun: aynı üstdeğere başvuran tüm kapanımlar, aynı değişikliği anında görür. Bu güçlü bir özelliktir; ancak istenmeyen bağımlı bağlantılara neden olabilir.
Üstdeğer Kimliği
debug.upvalueid(f, n), f işlevinin n'inci üstdeğerinin benzersiz kimliğini döndürür. Aynı üstdeğer kimliğine sahip iki kapanım aynı hücreyi paylaşır.
debug.upvaluejoin
debug.upvaluejoin(f1, n1, f2, n2), f1'in n1'inci üstdeğerinin f2'nin n2'nci üstdeğeriyle aynı hücreyi paylaşmasını sağlar. Hata ayıklamaya yönelik düşük düzeyli bir araçtır.
Pratik Desenler
- Özel bir değişkeni paylaşan alıcı/ayarlayıcı çiftleri.
- Birden çok kapanım aracılığıyla sıfırlama özelliği sunulan olay sayacı.
- Birden çok API işlevi arasında paylaşılan modül durumu.
Paylaşılan Üstdeğer Sorusu
get ve set adlı iki kapanım aynı kapsamda oluşturulmuş ve ikisi de value değerini yakalamıştır. set(99) çağrılırsa get() ne döndürür?
Özet: Paylaşılan Üstdeğerler
Aynı kapsamdaki kapanımlar üstdeğer hücrelerini paylaşır. Değişiklikler, paylaşan tüm kapanımlar tarafından hemen görülür. Bu, Lua'da kapsüllemenin ve modül durumunun temelidir.
Sıkça Sorulan Sorular
“Kapanışlar Arasında Paylaşılan Upvalue'lar” dersi ücretsiz mi?
Evet — “Kapanışlar Arasında Paylaşılan Upvalue'lar” 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.
“Kapanışlar Arasında Paylaşılan Upvalue'lar” dersinde ne öğreneceğim?
Birden çok kapanışın aynı upvalue'ı paylaşmasını ve değişiklik etkilerini öğrenin. 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.
“Kapanışlar Arasında Paylaşılan Upvalue'lar” 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
- Upvalue'lar Nedir?
- Kapanışlar Arasında Paylaşılan Upvalue'lar
- Fabrika İşlevleri ve Üreteçler
- Kapanışlarla Notlandırma