2009-03-26 8 views
10

यदि लुआ में घुंघराले ब्रैकेट ('{' और '}') का उपयोग किया जाता है, तो उनके लिए क्या उपयोग किया जाता है?लुआ में इस्तेमाल घुंघराले ब्रैकेट हैं?

+1

मैं उनके साथ बदलने के लिए एक सरल पूर्वप्रक्रमक जोड़ने के बारे में उत्सुक था इसे "कम/फिर" और "अंत" थोड़ा कम वर्बोज़ बनाने के लिए। – Sydius

+0

टोकन फ़िल्टर और मेटलुआ पर एक नज़र डालें, दोनों को अक्सर www.lua.org पर लुआ-एल मेलिंग सूची में संदर्भित किया गया है। दोनों अमूर्त वाक्यविन्यास वृक्ष स्तर पर भाषा को संशोधित करने के तरीके प्रदान करते हैं, और ऐसा करने में सक्षम हो सकते हैं। एक प्रीप्रोसेसर को इसे सही करने के लिए बहुत सारे पार्सिंग करने की आवश्यकता होगी। – RBerteig

उत्तर

33

टेबल शाब्दिक।

तालिका लुआ में केंद्रीय प्रकार है, और या तो एक साहचर्य सरणी (हैश तालिका या शब्दकोश) के रूप में या एक साधारण सरणी के रूप में इलाज किया जा सकता। चाबियाँ nil को छोड़कर किसी भी लुआ प्रकार के मान हो सकती हैं, और तालिका के तत्व nil को छोड़कर कोई मान रख सकते हैं।

सरणी सदस्य पहुँच पर्दे के पीछे हैश कुंजी पहुँच तुलना में अधिक कुशल बनाया गया है, लेकिन विवरण आम तौर पर कोई फर्क नहीं है। यह वास्तव में स्पैर सरणी को संभालने में आसान बनाता है क्योंकि भंडारण केवल उन्हीं कक्षों के लिए आवंटित किया जाना चाहिए जिनमें मूल्य भी शामिल है।

यह एक सार्वभौमिक 1 आधारित सरणी मुहावरा है कि एक सी प्रोग्रामर के लिए एक छोटे से अजीब लगता है के लिए नेतृत्व करता है।

उदाहरण

a = { 1, 2, 3 } 

के लिए अपने इंडेक्स मान जैसे ही है तीन तत्वों है कि (संयोग) के साथ चर a में संग्रहीत एक सरणी पैदा करता है। 3.

गैर पूर्णांक कुंजी के साथ एक मेज शुरु कर रहा है इस तरह किया जा सकता है क्योंकि तत्वों 1 के साथ शुरुआत अनुक्रमिक सूचकांकों में जमा हो जाती है, a की लंबाई (#a या table.getn(a) द्वारा दिए गए) है:

b = { one=1, pi=3.14, ["half pi"]=1.57, [function() return 17 end]=42 } 

जहां b में "एक", "पीआई", "आधा पीआई" नामक प्रविष्टियां होंगी, और एक अनाम कार्य। बेशक, तालिका को पुन: स्थापित किए बिना उस अंतिम तत्व को देखकर मुश्किल हो सकती है जब तक कि उस बहुत ही फ़ंक्शन की एक प्रति किसी अन्य चर में संग्रहीत न हो।

एक और जगह है कि घुंघराले ब्रेसिज़ दिखाई वास्तव में एक ही अर्थ अर्थ है, लेकिन यह कुछ वाक्यात्मक चीनी के पीछे (लुआ का एक नया उपयोगकर्ता के लिए) छुपा है। उन कार्यों को लिखना आम बात है जो एक तर्क लेते हैं जो एक टेबल होना चाहिए। उस स्थिति में, फ़ंक्शन को कॉल करने के लिए कोष्ठक के उपयोग की आवश्यकता नहीं होती है। इसका परिणाम कोड में होता है जिसमें () और {} का मिश्रण शामिल होता है जो स्पष्ट रूप से फ़ंक्शन कॉल ऑपरेटर के रूप में उपयोग किया जाता है।

btn = iup.button{title="ok"} 

btn = iup.button({title="ok"}) 

के बराबर है, लेकिन यह भी आंखों पर कठिन कम है। संयोग से, एक शाब्दिक मूल्य के साथ एकल-तर्क फ़ंक्शन को कॉल करना स्ट्रिंग अक्षर के लिए भी काम करता है।

t = {'a', 'b', 'c'} 

केवल आम बात है कि:

4

सूची/ditionary निर्माता (अर्थात तालिका प्रकार निर्माता)।

वे पाते हैं कि अगर तुम क्या मतलब है कोड ब्लॉक के लिए इस्तेमाल नहीं कर रहे हैं। उस लूआ के लिए ब्लॉक को समाप्त करने के लिए केवल अंतिम कीवर्ड का उपयोग करता है।

See here

+0

आह, ठीक है, अब मुझे मूर्खतापूर्ण लगता है। – Sydius

+0

लुआ में कोई सूचियां या शब्दकोश नहीं हैं, लेकिन एक "टेबल" प्रकार जो दोनों के रूप में कार्य करता है। इसलिए घुंघराले ब्रैकेट का उपयोग टेबल कन्स्ट्रक्टर के रूप में किया जाता है। –

+0

@Alexander Gladysh: धन्यवाद, मैंने अपना जवाब समायोजित किया। –

1

वे के रूप में आप सी में प्रयोग करेंगे तालिका शाब्दिक के लिए इस्तेमाल कर रहे हैं। उनका उपयोग ब्लॉक डिलीमीटर के लिए नहीं किया जाता है।एक lua तालिका में, आपको विभिन्न प्रकार के मूल्यों को रख सकते हैं:

t={"foo", 'b', 3} 

तुम भी उन्हें dictionnaries के रूप में उपयोग कर सकते हैं ला पायथन:

t={name="foo", age=32} 
संबंधित मुद्दे