2013-05-06 20 views
7

मैं थोड़ा उलझन में हूं कि .hrl फ़ाइल के लिए उपयोग किया जाना चाहिए। यह मेरी समझ है कि .hrl फाइलों में कोई वैध एरलांग कोड हो सकता है और -include निर्देश का उपयोग करके अनिवार्य रूप से .hrl फ़ाइल में किसी भी मॉड्यूल में कोड डालना होगा जिसमें यह शामिल है।एरलांग हेडर (.hrl) फ़ाइल में क्या होना चाहिए और नहीं होना चाहिए?

इन .hrl फ़ाइलों में डालने के लिए किस तरह का कोड उचित है? Erlang की प्रोग्रामिंग नियम रिकॉर्ड के संबंध में निम्नलिखित: रिकॉर्ड कई मॉड्यूल में प्रयोग की जाने वाली है

हैं, तो इसकी परिभाषा एक हेडर फाइल (प्रत्यय .hrl के साथ) में रखा जाना चाहिए कि मॉड्यूल से शामिल किया गया है।

नतीजतन, मैंने अपने कोड में ऐसा करने की आदत बनाई है। हालांकि, मैं अपने शीर्षकों में रिकॉर्ड के लिए तत्कालता और तुलनात्मक कार्यों जैसे टाइप परिभाषाओं को भी पसंद करना चाहता हूं (क्योंकि यह ऐसी चीज है जो मैं सी में करता हूं)। क्या यह बुरा रूप है? अगर .erl फ़ाइल से प्रकारों को निर्यात किया जाना चाहिए, भले ही वे एकाधिक मॉड्यूल में उपयोग किए जाएं? एरलांग शीर्षकों के बारे में सर्वोत्तम प्रथाओं पर कोई प्रलेखन प्रतीत नहीं होता है।

उत्तर

9

LIK सी, शामिल कथन सचमुच शामिल फ़ाइल की सामग्री को एआरएल फ़ाइल में जोड़ता है। इसलिए, एचआरएल फाइलों में कोई भी वास्तविक कोड डालने से उस कोड को कॉपी करने के लिए हर जगह कॉपी किया जाएगा। इससे प्रत्येक एरलांग मॉड्यूल में कार्यक्षमता की अनावश्यक डुप्लिकेशन हो जाएगी।

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

4

मैं अपने यूनिट परीक्षणों में उपयोग के लिए विभिन्न फिक्स्चर स्टोर करने के लिए एचआरएल फाइलों का उपयोग करता हूं। मुझे किसी भी चीज़ के लिए वास्तविक उत्पादन कोड में उनका उपयोग करना पसंद नहीं है। अलग-अलग स्थानों में आयात किए गए एक ही फ़ंक्शन को कोड के बारे में तर्क करना मुश्किल हो जाता है। यह एक अलग मॉड्यूल में बस उस कोड को रखने और इसे स्पष्ट रूप से निर्यात करने के लिए अधिक बेहतर है। प्रकार को -export_type निर्देश के साथ स्पष्ट रूप से निर्यात किया जा सकता है।

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

संक्षेप में, किसी भी महत्वपूर्ण के लिए उनका उपयोग न करें।

5

आमतौर पर आप .hrl में चीजें डालते हैं जिन्हें आप मॉड्यूल के बीच साझा करना चाहते हैं, आमतौर पर रिकॉर्ड परिभाषाएं और मैक्रोज़ रिकॉर्ड करते हैं। चीजें जो एक मॉड्यूल के लिए पूरी तरह से स्थानीय होने के लिए हैं, आप .hrl फ़ाइल में नहीं डाल पाएंगे। तो पूरी तरह से स्थानीय रिकॉर्ड परिभाषा, उदाहरण के लिए एक सर्वर में स्थानीय राज्य .hrl में नहीं बल्कि केवल सर्वर को परिभाषित मॉड्यूल में नहीं जाएगा। मैक्रो परिभाषाओं के साथ ही। आपको हमेशा आंतरिक जानकारी को अनावश्यक रूप से उजागर करने से बचना चाहिए।

चूंकि फ़ाइल शामिल फ़ाइल को सीधे फ़ाइल में डाला गया है, तो इसमें शामिल किसी भी कोड को प्रत्येक मॉड्यूल में डुप्लीकेट किया जाएगा जिसमें इसे शामिल किया जाएगा। आप आमतौर पर ऐसा नहीं करना चाहते हैं।

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