Lua Academy · पाठ

क्लोज़र के बीच साझा Upvalue

एक ही upvalue साझा करने वाले कई क्लोज़र और म्यूटेशन के प्रभाव समझें।

पाठ 2, कुल 4 में से13 चरण

क्लोज़र के बीच साझा Upvalue, CoddyKit पर Lua Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Lua Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Lua Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

एक ही अपवैल्यू साझा करना

एक ही स्कोप में परिभाषित दो क्लोज़र बिल्कुल उसी अपवैल्यू सेल को साझा कर सकते हैं। एक द्वारा किए गए बदलाव दूसरे को दिखाई देते हैं।

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())  -- 42

साझाकरण क्यों होता है

Lua प्रत्येक क्लोज़र के लिए अपवैल्यू की प्रतिलिपि नहीं बनाता। एक ही ब्लॉक में बनाए गए सभी क्लोज़र, जो एक ही स्थानीय चर की ओर संकेत करते हैं, एक अपवैल्यू सेल साझा करते हैं।

साझा अपवैल्यू द्वारा ऑब्ज़र्वर पैटर्न

साझा अपवैल्यू कई क्लोज़र के बीच संदेश बस की तरह काम कर सकता है।

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())  -- 1

लूप चर की सावधानी

numeric for लूप में प्रत्येक पुनरावृत्ति एक नया स्थानीय लूप चर बनाती है, इसलिए क्लोज़र स्वतंत्र अपवैल्यू कैप्चर करते हैं।

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 लूप चर की सावधानी

while लूप में, यदि आप बदलने वाले एक ही चर को क्लोज़र में कैप्चर करते हैं, तो सभी क्लोज़र उसी अपवैल्यू को साझा करते हैं और अंतिम मान देखते हैं।

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!)

नया स्थानीय चर कैप्चर करना

while लूप में स्वतंत्र मान कैप्चर करने के लिए, लूप के मुख्य भाग के भीतर एक नया स्थानीय चर बनाएँ।

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]() == 2

साझी स्थिति वाला मॉड्यूल पैटर्न

कोई मॉड्यूल अपवैल्यू के माध्यम से निजी स्थिति वाली एक तालिका साझा करने वाले कई फ़ंक्शन उपलब्ध करा सकता है।

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,
  }
end

उपनाम और बदलाव

सावधान रहें: एक ही अपवैल्यू को संदर्भित करने वाले सभी क्लोज़र उसी बदलाव को तुरंत देखते हैं। यह शक्तिशाली है, लेकिन अनचाहा परस्पर-निर्भर संबंध पैदा कर सकता है।

अपवैल्यू की पहचान

debug.upvalueid(f, n) फ़ंक्शन f के nवें अपवैल्यू की विशिष्ट पहचान लौटाता है। समान अपवैल्यू ID वाले दो क्लोज़र एक ही सेल साझा करते हैं।

debug.upvaluejoin

debug.upvaluejoin(f1, n1, f2, n2) f1 के n1वें अपवैल्यू को f2 के n2वें अपवैल्यू वाले उसी सेल को साझा करने देता है। यह डीबगिंग के लिए निम्न-स्तरीय उपकरण है।

व्यावहारिक पैटर्न

  • निजी चर साझा करने वाले गेटर/सेटर युग्म।
  • कई क्लोज़र के माध्यम से रीसेट उपलब्ध कराने वाला घटना काउंटर।
  • कई API फ़ंक्शन में साझा मॉड्यूल स्थिति।

साझा अपवैल्यू संबंधी प्रश्न

एक ही स्कोप में get और set नामक दो क्लोज़र बनाए गए हैं और दोनों value को कैप्चर करते हैं। यदि set(99) को कॉल किया जाए, तो get() क्या लौटाएगा?

पुनरावृत्ति: साझा अपवैल्यू

एक ही स्कोप के क्लोज़र अपवैल्यू सेल साझा करते हैं। बदलाव साझा करने वाले सभी क्लोज़र को तुरंत दिखाई देते हैं। Lua में एनकैप्सुलेशन और मॉड्यूल स्थिति का आधार यही है।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Lua सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
40
पाठ
159

अक्सर पूछे जाने वाले प्रश्न

क्या “क्लोज़र के बीच साझा Upvalue” पाठ निःशुल्क है?

हाँ — Lua Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “क्लोज़र के बीच साझा Upvalue” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Lua Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“क्लोज़र के बीच साझा Upvalue” में मैं क्या सीखूँगा?

एक ही upvalue साझा करने वाले कई क्लोज़र और म्यूटेशन के प्रभाव समझें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Lua Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Lua Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Lua Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“क्लोज़र के बीच साझा Upvalue” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Lua Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Lua Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Upvalue क्या हैं
  2. क्लोज़र के बीच साझा Upvalue
  3. फ़ैक्टरी फ़ंक्शन और जनरेटर
  4. क्लोज़र से मेमोइज़ेशन
← Lua Academy पर वापस जाएँ