2012-01-02 19 views
6

क्या कोईtry-finally या try-except को ऐसी भाषा में अनुकरण करने का तरीका है, जो उनके पास नहीं है?उन भाषाओं में को छोड़कर अंततः कोशिश करें या कोशिश करें-

यदि कुछ यादृच्छिक, अप्रत्याशित, अपवाद होता है तो मुझे यह सुनिश्चित करने की ज़रूरत है कि कुछ क्लीनअप रन हो।

मैं , यह सुनिश्चित करें कि कोई अपवाद उत्पन्न होने की कोशिश कर सकता है कि जिस तरह से मुझे यकीन है कि मेरी सफाई कोड हमेशा चलाता हूँ - लेकिन फिर मैं try-finally/except जरूरत नहीं होगी।

इस पल में मैं लूआ में try-finally बनाने की कोशिश कर रहा हूं; लेकिन मुझे लगता है कि कोई समाधान अन्य भाषाओं में भी काम करेगा।

हालांकि, मेरे जीवन के लिए, मैं यह नहीं समझ सकता कि भाषा बुनियादी ढांचे द्वारा प्रदान की गई नलसाजी के बिना अपवाद कैसे संभाला जा सकता है।

लेकिन कभी पूछने के लिए दर्द नहीं होता है।

+0

क्या "जोर" फ़ंक्शन एक विकल्प नहीं है? http://www.lua.org/pil/8.3.html – Will

+0

@ क्या मेरे द्वारा या तो * मेरे द्वारा अपवादों को फेंकने में कोई समस्या नहीं है। मुझे बस उन्हें रोकने की जरूरत है। क्या ऐसा कह सकता है? –

+0

हां, मुझे विश्वास है कि जोर से अपवादों को फेंकने से रोका जाएगा और आपको इसके बजाय अपना अपवाद उठाने की अनुमति मिलेगी। ओह, और जेराल्ड ने जो भी पोस्ट किया वह एक और अच्छा काम है, पीसीएल। मैं लुआ में त्रुटि प्रबंधन से बहुत परिचित नहीं हूं, लेकिन मेरा मानना ​​है कि कुछ ऐसे कार्य हैं जो आप चाहते हैं जो करेंगे। – Will

उत्तर

16

लुआ में पहले से ही अपवादों के विपरीत पूरी तरह से कुछ करने के लिए आवश्यक तंत्र हैं। अर्थात् pcall

आप किसी भी लुआ फ़ंक्शन को निष्पादित करने के लिए pcall का उपयोग कर सकते हैं। यदि वह कार्य (या कोई भी फ़ंक्शन जिसे कॉल करता है) error (assert कॉल error पर कॉल करता है यदि दावा स्थिति सत्य नहीं है), तो प्रवाह नियंत्रण pcall कथन की साइट पर वापस आ जाएगा। pcall झूठी और एक त्रुटि संदेश लौटाएगा (error को क्या पास किया गया है)।

इसके साथ, आप त्रुटियों को "फेंक" और "पकड़" सकते हैं। आपका "प्रयास" केवल pcall है; आपका "कैच" स्टेटमेंट pcall परिणाम की जांच करता है।

इसके अलावा, याद रखें: लुआ एक कचरा एकत्रित वातावरण है। आपको किसी भी सफाई कार्य करने की आवश्यकता नहीं है। या यदि आप करते हैं, तो आपको जो भी लुआ मॉड्यूल की आवश्यकता है उसे बदलने की जरूरत है। लुआ एपीआई लू एपीआई होना चाहिए, सी या सी ++ एपीआई नहीं।

+0

इस मामले में * "। सफाई "* का मतलब:।।' suppressFlag ++; pcall (doStuff); suppressFlag -; 'और यह लग रहा है अपने मूल भय की तरह सही था - भाषा समर्थन मनमाना त्रुटियों को पकड़ने के बिना एक संभावना लेकिन' pcall' खोजने पर उत्कृष्ट कार्य नहीं है मैं। abou के लिए googled टी 5 मिनट और कुछ भी नहीं मिला। –

2

कभी भी लुआ में प्रोग्राम नहीं किया गया (जो आपने इसे टैग किया है)। हालांकि, इस http://jessewarden.com/2011/01/lua-for-actionscript-developers.html समेत कई वेब पेजों का उल्लेख है कि संरक्षित कॉल (पीसीएल) लुआ एरर हैंडलिंग डिवाइस है।

उम्मीद है कि इससे मदद मिलती है।

0

सामान्य रूप से, सिग्नल() फ़ंक्शन का उपयोग करके अपवादों को पकड़ा जा सकता है। सुनिश्चित नहीं है कि लुआ इस तरह का समर्थन करेगा। सी में, आप यही उपयोग करेंगे। और यह एक बड़ी परेशानी है! (कुछ हद तक जटिल।)

संबंधित मुद्दे