क्लोज़र के साथ स्टेटफुल इटरेटर
क्लोज़र का उपयोग करके ऐसे इटरेटर बनाएँ जो कॉल के बीच स्थिति बनाए रखें।
क्लोज़र के साथ स्टेटफुल इटरेटर, CoddyKit पर Lua Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Lua Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Lua Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
क्लोज़र कब उपयोगी होते हैं
जब किसी इटरेटर को जटिल और बदलती हुई स्थिति (स्थान, स्टैक, इतिहास) बनाए रखनी हो, तो क्लोज़र स्वाभाविक उपकरण होते हैं। स्थिति अपवैल्यू में रहती है।
क्लोज़र इटरेटर पैटर्न
एकल फ़ंक्शन लौटाएँ; स्थिति अपवैल्यू में रखें। Generic for कोई बाहरी स्थिति उपलब्ध नहीं कराता—वह हर बार केवल फ़ंक्शन को कॉल करता है।
local function chars(s)
local i = 0
return function()
i = i + 1
local c = s:sub(i, i)
return c ~= "" and c or nil
end
end
for c in chars("lua") do print(c) endफ़ाइल पंक्ति पुनरावर्तक
एक पारंपरिक अवस्थायुक्त क्लोज़र पुनरावर्तक, EOF तक फ़ाइल हैंडल से पंक्तियाँ देता है।
local function lines(filename)
local f = io.open(filename, "r")
return function()
local line = f:read("*l")
if not line then f:close() end
return line
end
endफ़िल्टर पुनरावर्तक
किसी मौजूदा पुनरावर्तक को ऐसे क्लोज़र से लपेटें, जो predicate से मेल न खाने वाले तत्वों को छोड़ देता है।
local function filtered(iter, pred)
return function()
local v = iter()
while v ~= nil and not pred(v) do
v = iter()
end
return v
end
endमानचित्रित पुनरावर्तक
मानचित्रण पुनरावर्तक प्रत्येक तत्व को उसी समय बदलता है, बिना किसी मध्यवर्ती तालिका का निर्माण किए।
local function mapped(iter, fn)
return function()
local v = iter()
if v ~= nil then return fn(v) end
end
endयुग्मित पुनरावर्तक
युग्म पुनरावर्तक दो पुनरावर्तकों से एक साथ मान लेता है और जैसे ही कोई एक समाप्त हो जाता है, रुक जाता है।
local function zipped(iter1, iter2)
return function()
local a, b = iter1(), iter2()
if a ~= nil and b ~= nil then return a, b end
end
endशृंखलाबद्ध पुनरावर्तक
शृंखला पुनरावर्तक अगले पुनरावर्तक पर जाने से पहले वर्तमान पुनरावर्तक को पूरी तरह समाप्त करता है।
local function chained(...)
local iters = {...}
local idx = 1
return function()
while idx <= #iters do
local v = iters[idx]()
if v ~= nil then return v end
idx = idx + 1
end
end
endगणनायुक्त पुनरावर्तक
क्लोज़र काउंटर का उपयोग करके पुनरावर्तक को अधिकतम N मानों तक सीमित करें।
local function take(n, iter)
local count = 0
return function()
count = count + 1
if count <= n then return iter() end
end
endवृक्ष-भ्रमण पुनरावर्तक
गहराई-प्रथम वृक्ष-भ्रमण, भ्रमण की स्थिति बनाए रखने के लिए एक स्टैक (upvalue के रूप में तालिका) का उपयोग करता है।
local function dfs(root)
local stack = {root}
return function()
if #stack == 0 then return nil end
local node = table.remove(stack)
for _, child in ipairs(node.children or {}) do
stack[#stack+1] = child
end
return node
end
endमेमोरी संबंधी विचार
अवस्थायुक्त पुनरावर्तक एक क्लोज़र ऑब्जेक्ट आवंटित करते हैं। अत्यंत कसे हुए आंतरिक लूप के लिए अवस्थारहित पुनरावर्तक बेहतर हो सकता है। जटिल भ्रमण के लिए क्लोज़र का उपयोग करना उचित है।
तुलना: अवस्थायुक्त बनाम अवस्थारहित
- अवस्थायुक्त: जटिल स्थिति, किसी भी भ्रमण क्रम का समर्थन, लिखना आसान।
- अवस्थारहित: सरल क्रमिक पहुँच, शून्य आवंटन, तेज़।
अवस्थायुक्त पुनरावर्तक संबंधी प्रश्न
अवस्थायुक्त क्लोज़र पुनरावर्तक अपनी स्थिति कहाँ संग्रहीत करता है?
पुनरावृत्ति: अवस्थायुक्त पुनरावर्तक
क्लोज़र-आधारित अवस्थायुक्त पुनरावर्तक जटिल भ्रमण स्थिति को upvalues में संग्रहीत करते हैं, जिससे फ़िल्टर, मानचित्र, वृक्ष और आलसी प्रवाह-श्रृंखलाएँ संभव होती हैं—और ये सभी संयोज्य तथा मेमोरी-कुशल होती हैं।
एआई शिक्षक के साथ Lua सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 40
- पाठ
- 159
अक्सर पूछे जाने वाले प्रश्न
क्या “क्लोज़र के साथ स्टेटफुल इटरेटर” पाठ निःशुल्क है?
हाँ — Lua Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “क्लोज़र के साथ स्टेटफुल इटरेटर” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Lua Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“क्लोज़र के साथ स्टेटफुल इटरेटर” में मैं क्या सीखूँगा?
क्लोज़र का उपयोग करके ऐसे इटरेटर बनाएँ जो कॉल के बीच स्थिति बनाए रखें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Lua Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Lua Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Lua Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“क्लोज़र के साथ स्टेटफुल इटरेटर” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Lua Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Lua Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- सामान्य for प्रोटोकॉल
- स्टेटलेस इटरेटर
- क्लोज़र के साथ स्टेटफुल इटरेटर
- कोरूटीन-आधारित जनरेटर