आपकी समस्या सरल है:
names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
print (names)
end
यह कोड पहली बार एक वैश्विक चर घोषित करता है names
। उसके बाद, आप लूप के लिए प्रारंभ करें। लूप के लिए एक स्थानीय वैरिएबल घोषित करता है, जो कि सिर्फ इतना ही होता names
है; इस तथ्य को कि पहले एक चर के साथ परिभाषित किया गया था names
, पूरी तरह से अप्रासंगिक है। names
लूप के लिए अंदर का कोई भी उपयोग स्थानीय को संदर्भित करेगा , वैश्विक को नहीं।
फॉर लूप का कहना है कि लूप के अंदरूनी हिस्से को names = 1
तब names = 2
, और अंत में बुलाया जाएगा names = 3
। लूप के लिए एक काउंटर घोषित करता है जो पहले नंबर से आखिरी तक गिना जाता है, और यह आंतरिक कोड को एक बार प्रत्येक मूल्य के लिए कॉल करता है।
जो आप वास्तव में चाहते थे वह कुछ इस तरह था:
names = {'John', 'Joe', 'Steve'}
for nameCount = 1, 3 do
print (names[nameCount])
end
[] वाक्यविन्यास है कि आप एक लुआ तालिका के सदस्यों तक कैसे पहुँचते हैं। लुआ टेबल "मान" के लिए "चाबियाँ" का नक्शा। आपका सरणी स्वतः पूर्णांक प्रकार की कुंजी बनाता है, जो वृद्धि करता है। तो तालिका में "जो" से जुड़ी कुंजी 2 है (लुआ सूचकांक हमेशा 1 पर शुरू होता है)।
इसलिए, आपको एक लूप की आवश्यकता है जो 1 से 3 तक गिना जाता है, जो आपको मिलता है। आप तालिका से तत्व तक पहुंचने के लिए गिनती चर का उपयोग करते हैं।
हालांकि, इसमें एक दोष है। यदि आप सूची में से किसी एक तत्व को हटाते हैं तो क्या होता है?
names = {'John', 'Joe'}
for nameCount = 1, 3 do
print (names[nameCount])
end
अब, हम प्राप्त करते हैं John Joe nil
, क्योंकि परिणाम तालिका में मौजूद मानों तक पहुँचने का प्रयास नहीं किया जाता है nil
। इसे रोकने के लिए, हमें तालिका की लंबाई 1 से गिनने की आवश्यकता है :
names = {'John', 'Joe'}
for nameCount = 1, #names do
print (names[nameCount])
end
#
लंबाई ऑपरेटर है। यह टेबल और स्ट्रिंग्स पर काम करता है, दोनों की लंबाई वापस करता है। अब, कोई फर्क नहीं पड़ता कि कितना बड़ा या छोटा names
मिलता है, यह हमेशा काम करेगा।
हालाँकि, आइटम की एक सरणी के माध्यम से पुनरावृति करने का एक और अधिक सुविधाजनक तरीका है:
names = {'John', 'Joe', 'Steve'}
for i, name in ipairs(names) do
print (name)
end
ipairs
एक Lua मानक फ़ंक्शन है जो एक सूची पर प्रसारित होता है। for
लूप की यह शैली, लूप के लिए इटरेटर, इस तरह के इटरेटर फ़ंक्शन का उपयोग करता है। i
मान सरणी में प्रवेश के सूचकांक है। name
मूल्य कि सूचकांक में मूल्य है। तो यह मूल रूप से आपके लिए बहुत सारे गंभीर काम करता है।