2015-03-05 5 views
11

मैं हास्केल में कुछ कोड लिख रहा हूं, और fromJust (जहां मैं इनपुट से मूल्य की अपेक्षा करता हूं) खतरनाक गैर-कुल कार्य का उपयोग करता हूं। मैं बाद में सोचने जा रहा हूं कि किस प्रकार की त्रुटि-हैंडलिंग शैली का उपयोग करना चाहता हूं।क्या जीएचसी खतरनाक गैर-कुल कार्यों के उपयोग के बारे में चेतावनी दे सकता है?

GHC मुझे लगता है कि मैं खतरनाक गैर कुल कार्यों के सभी उपयोगों से छुटकारा मिल गया है बनाने में मदद कर सकते हैं (जैसे fromJust या head, जो दुर्घटना सकता है), मुझे चेतावनी कि वे कहाँ हैं दे।

+2

आंशिकता अनुमान वास्तव में जीएचसी देवताओं द्वारा चर्चा में है। इस बीच, आपकी सबसे अच्छी शर्त शायद उन कार्यों के आयात को छिपाने के लिए है, और (यह सुनिश्चित करने के लिए कि वे वास्तव में छिपाए गए हैं) उन्हें स्वयं परिभाषित करें: 'से Just =()' चाल चलनी चाहिए। – dfeuer

+3

यहां तक ​​कि उन्हें एक मॉड्यूल में फिर से परिभाषित करें, जिसे आप "चेतावनी चालू करने" के तरीके के रूप में अयोग्य आयात करते हैं। इसके बाद आपको किसी भी स्थान पर आपको अस्पष्टता त्रुटि मिल जाएगी जो आप वास्तव में प्रीलूड के संस्करणों का उपयोग करते हैं (जब तक कि आप तब तक योग्य नहीं हो जाते, जैसा कि 'Prelude.fromJust') में है। यह आंशिक कार्यों के लिए आपकी सहायता नहीं करेगा, हालांकि आप अन्य मॉड्यूल के योग्य आयात से उपयोग करते हैं। – Ben

उत्तर

3

जीएचसी -fwarn-incomplete-patterns के साथ आंशिक पैटर्न के साथ परिभाषाओं के बारे में चेतावनी दे सकता है (हालांकि उन मानों के उपयोग के बारे में चेतावनी नहीं देता है जिनमें अपूर्ण पैटर्न शामिल हैं)। इसके अतिरिक्त, नील मिशेल का catch आंशिक कार्यों के सुरक्षित और असुरक्षित आमंत्रणों की पहचान करने के लिए थोड़ा और विस्तृत विश्लेषण करने का प्रयास करता है। (हालांकि निश्चित रूप से यह सामान्य रूप से एक अनिश्चित समस्या है, इसलिए यह हमेशा सही नहीं होगा!)

+0

सिर्फ मेरे लिए एक नोट। मैं इस विचार पर आया कि जब भी मैं व्यावहारिक रूप से उपयोगी कोड में एक गैर-कुल पैटर्न मिलान का उपयोग करना चाहता हूं (और मेरा मानना ​​है कि अर्थात् मैं सभी वास्तविक मामलों को समाप्त करता हूं), मुझे नहीं करना चाहिए। कुछ मामलों में यह वर्ग में गैर-कुल कार्य को लपेटकर अनुमान को और अधिक स्पष्ट करना चाहिए और इसे उस स्थान के पास परिभाषित करना चाहिए जहां यह स्पष्ट है कि यह ठीक है (पूरी तरह से असुरक्षित और अनियंत्रित कोड के लिए कामकाज के रूप में)। उदाहरण: [एक 'ToJSONObject' बाधा] (https://github.com/bos/aeson/issues/79#issuecomment-108959252) सामान्य रूप से एन्कोड किए गए डेटा के लिए और फिर deconstructed। –

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

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