में वैश्विक झंडे का इलाज करने का सही तरीका मुझे अक्सर एक कोर फ़ंक्शन बनाने की आवश्यकता होती है जिसका उपयोग कई स्थानों पर किसी भी तरह कॉन्फ़िगर करने योग्य होता है - यानी, यह कमांड लाइन स्विच के आधार पर या तो एल्गोरिदम ए या एल्गोरिदम बी का उपयोग कर सकता है; या यदि कोई 'डीबग' ध्वज किसी भी तरह से सेट किया गया है, तो यह stdout को अतिरिक्त-वर्बोज़ जानकारी मुद्रित करता है।हास्केल
मुझे ऐसे वैश्विक ध्वज कैसे लागू करना चाहिए?
मुझे 4 विकल्प दिखाई देते हैं, वे सभी वास्तव में अच्छे नहीं हैं।
1) फ़ंक्शन से कमांड लाइन तर्क पढ़ें - खराब, क्योंकि इसके लिए आईओ मोनड की आवश्यकता है और कोर गणना फ़ंक्शन सभी शुद्ध हैं, मैं वहां आईओ नहीं प्राप्त करना चाहता हूं;
2) मुख्य रूप से 'पत्ते' समारोह के माध्यम से मुख्य/आईओ से पैरामीटर पास करें, जिसे व्यवहार को बदलने की जरूरत है - पूरी तरह से अनुपयोगी, क्योंकि इसका मतलब है कि इस पैरामीटर को पार करने के लिए विभिन्न मॉड्यूल में एक दर्जन असंबद्ध कार्यों को बदलना, और मैं हर बार रैपिंग कोड को बदले बिना कई बार इस तरह के कॉन्फ़िगरेशन विकल्पों को आजमाने की कोशिश करता हूं;
3) एक वास्तविक वैश्विक चर प्राप्त करने के लिए असुरक्षित पैराफॉर्मियो का उपयोग करें - इस तरह के एक साधारण मुद्दे के लिए बदसूरत और ओवरकिल लगता है;
4) फनसीन के बीच में दोनों विकल्पों के लिए कोड है और उनमें से एक टिप्पणी करें। या कार्यों को do_stuff_A और do_stuff_B है, और उनमें से कौन सा एक वैश्विक फ़ंक्शन 'needDebugInfo = True' कहता है, इस पर निर्भर करता है। यही कारण है कि मैं debuginfo अभी कर रहा हूँ, लेकिन यह बदला नहीं जा सकता w/ओ recompile, और यह वास्तव में सबसे अच्छा उपलब्ध रास्ता नहीं होना चाहिए ...
मैं या जरूरत नहीं है वैश्विक परिवर्तनशील चाहते राज्य - मैं एक साधारण वैश्विक झंडा चाहता हूं जो रनटाइम पर अपरिवर्तनीय है लेकिन प्रोग्राम लॉन्च होने पर किसी भी तरह से सेट किया जा सकता है। क्या कोई विकल्प हैं?