Erlang 21 - 5. Modules

5 मॉड्यूल




erlang

5 मॉड्यूल

5.1 मॉड्यूल सिंटैक्स

Erlang कोड मॉड्यूल में विभाजित है। एक मॉड्यूल में विशेषताओं और फ़ंक्शन घोषणाओं का एक क्रम होता है, प्रत्येक को अवधि (।) द्वारा समाप्त किया जाता है।

उदाहरण:

-module(m).          % module attribute
-export([fact/1]).   % module attribute

fact(N) when N>0 ->  % beginning of function declaration
    N * fact(N-1);   %  |
fact(0) ->           %  |
    1.               % end of function declaration

फ़ंक्शन घोषणाओं के विवरण के लिए, Function Declaration Syntax देखें।

5.2 मॉड्यूल गुण

एक मॉड्यूल विशेषता एक मॉड्यूल की एक निश्चित संपत्ति को परिभाषित करता है।

एक मॉड्यूल विशेषता में एक टैग और एक मूल्य होता है:

-Tag(Value).

Tag एक परमाणु होना चाहिए, जबकि Value एक शाब्दिक शब्द होना चाहिए। उपयोगकर्ता-परिभाषित विशेषताओं में एक सुविधा के रूप में, यदि शाब्दिक शब्द Value में वाक्यविन्यास Name/Arity (जहाँ Name एक परमाणु है और Arity एक धनात्मक पूर्णांक है), शब्द Name/Arity का अनुवाद {Name,Arity}

किसी भी मॉड्यूल विशेषता को निर्दिष्ट किया जा सकता है। विशेषताओं को संकलित कोड में संग्रहीत किया जाता है और Module:module_info(attributes) को कॉल करके या beam_lib(3) में मॉड्यूल beam_lib(3) का उपयोग करके पुनर्प्राप्त किया जा सकता है।

कई मॉड्यूल विशेषताओं के पूर्वनिर्धारित अर्थ हैं। उनमें से कुछ में दो हैं, लेकिन उपयोगकर्ता द्वारा परिभाषित मॉड्यूल विशेषताओं में एक होना चाहिए।

पूर्व निर्धारित मॉड्यूल गुण

पूर्व-परिभाषित मॉड्यूल विशेषताओं को किसी भी फ़ंक्शन घोषणा से पहले रखा जाना है।

-module(Module).

मॉड्यूल की घोषणा, मॉड्यूल के नाम को परिभाषित करता है। नाम Module , एक परमाणु, फ़ाइल नाम के विस्तार के समान ही है .erl । अन्यथा code loading उद्देश्य के अनुसार काम नहीं करती है।

यह विशेषता पहले निर्दिष्ट की जानी है और एकमात्र अनिवार्य विशेषता है।

-export(Functions).

निर्यात किए गए कार्य। निर्दिष्ट करता है कि कौन से फ़ंक्शन मॉड्यूल के भीतर परिभाषित हैं, जो मॉड्यूल के बाहर से दिखाई देते हैं।

Functions एक सूची है [Name1/Arity1, ..., NameN/ArityN] , जहाँ प्रत्येक NameI एक परमाणु है और ArityI पूर्णांक है।

-import(Module,Functions).

आयातित कार्य। स्थानीय कार्यों के समान तरीका कहा जा सकता है, अर्थात बिना किसी मॉड्यूल उपसर्ग के।

Module , एक परमाणु, निर्दिष्ट करता है कि किस मॉड्यूल से फ़ंक्शन आयात किया जाए। export लिए Functions समान सूची है।

-compile(Options).

संकलक विकल्प। Options एकल विकल्प या विकल्पों की सूची है। मॉड्यूल को संकलित करते समय यह विशेषता विकल्प सूची में जोड़ी जाती है। कंपाइलर में compile(3) मैनुअल पेज देखें।

-vsn(Vsn).

मॉड्यूल संस्करण। Vsn किसी भी शाब्दिक शब्द है और इसे beam_lib:version/1 का उपयोग करके पुनर्प्राप्त किया जा सकता है beam_lib:version/1 , beam_lib(3) में beam_lib(3) मैनुअल पेज देखें।

यदि यह विशेषता निर्दिष्ट नहीं है, तो संस्करण मॉड्यूल के एमडी 5 चेकसम को डिफॉल्ट करता है।

-on_load(Function).

यह विशेषता एक फ़ंक्शन का नाम देती है जिसे मॉड्यूल लोड होने पर स्वचालित रूप से चलाया जाना है। अधिक जानकारी के लिए, Running a Function When a Module is Loaded देखें।

व्यवहार मॉड्यूल विशेषता

यह निर्दिष्ट करना संभव है कि मॉड्यूल एक व्यवहार के लिए कॉलबैक मॉड्यूल है :

-behaviour(Behaviour).

परमाणु Behaviour उस Behaviour का नाम देता है, जो उपयोगकर्ता द्वारा परिभाषित व्यवहार या निम्नलिखित ओटीपी मानकों में से एक हो सकता है:

  • gen_server
  • gen_statem
  • gen_event
  • supervisor

वर्तनी behavior भी स्वीकार किया जाता है।

मॉड्यूल के कॉलबैक कार्यों को सीधे निर्यात किए गए फ़ंक्शन behaviour_info/1 द्वारा निर्दिष्ट किया जा सकता है:

behaviour_info(callbacks) -> Callbacks.

या प्रत्येक कॉलबैक फ़ंक्शन के लिए -callback विशेषता द्वारा:

-callback Name(Arguments) -> Result.

यहां, Arguments शून्य या अधिक तर्कों की एक सूची है। -callback विशेषता को प्राथमिकता दी जानी है क्योंकि प्रलेखन का निर्माण करने या विसंगतियों का पता लगाने के लिए अतिरिक्त प्रकार की जानकारी का उपयोग टूल द्वारा किया जा सकता है।

OTP Design Principles में व्यवहार और कॉलबैक मॉड्यूल के बारे में और पढ़ें।

रिकॉर्ड परिभाषाएँ

मॉड्यूल विशेषताओं के लिए एक ही वाक्यविन्यास का उपयोग रिकॉर्ड परिभाषाओं के लिए किया जाता है:

-record(Record,Fields).

फ़ंक्शन की घोषणाओं के बीच, रिकॉर्ड परिभाषाओं को एक मॉड्यूल में कहीं भी अनुमति दी जाती है। Records में और पढ़ें

प्रीप्रोसेसर

मॉड्यूल विशेषताओं के लिए समान सिंटैक्स प्रीप्रोसेसर द्वारा उपयोग किया जाता है, जो फ़ाइल समावेशन, मैक्रोज़ और सशर्त संकलन का समर्थन करता है:

-include("SomeFile.hrl").
-define(Macro,Replacement).

Preprocessor में और पढ़ें।

फ़ाइल और लाइन सेट करना

मॉड्यूल विशेषताओं के लिए समान सिंटैक्स का उपयोग पूर्व-परिभाषित मैक्रोज़ को बदलने के लिए किया जाता है ?FILE और ?LINE

-file(File, Line).

इस विशेषता का उपयोग टूल द्वारा किया जाता है, जैसे कि येक, कंपाइलर को सूचित करने के लिए कि स्रोत प्रोग्राम किसी अन्य टूल द्वारा उत्पन्न होता है। यह मूल उपयोगकर्ता-लिखित फ़ाइल की पंक्तियों के लिए स्रोत फ़ाइलों के पत्राचार को भी इंगित करता है, जिससे स्रोत कार्यक्रम का उत्पादन होता है।

प्रकार और समारोह विनिर्देशों

मॉड्यूल विशेषताओं के लिए समान सिंटैक्स का उपयोग प्रकार और फ़ंक्शन विनिर्देशों को निर्दिष्ट करने के लिए किया जाता है:

-type my_type() :: atom() | integer().
-spec my_function(integer()) -> integer().

Types and Function specifications में अधिक पढ़ें।

विवरण EEP8 - Types and function specifications पर आधारित है EEP8 - Types and function specifications , जिसे आगे अद्यतन नहीं किया जाना है।

5.3 टिप्पणियाँ

टिप्पणियों को स्ट्रिंग्स और उद्धृत परमाणुओं के अलावा एक मॉड्यूल में कहीं भी रखा जा सकता है। चरित्र "%" के साथ एक टिप्पणी शुरू होती है, पर जारी रहती है, लेकिन अगली पंक्ति के अंत में शामिल नहीं होती है, और इसका कोई प्रभाव नहीं होता है। ध्यान दें कि समाप्ति अंत-पंक्ति में सफेद स्थान का प्रभाव होता है।

5.4 मॉड्यूल_इनफो / 0 और मॉड्यूल_इनफो / 1 कार्य

संकलक स्वचालित रूप से प्रत्येक मॉड्यूल में दो विशेष, निर्यात किए गए कार्यों को सम्मिलित करता है:

  • Module:module_info/0
  • Module:module_info/1

इन कार्यों को मॉड्यूल के बारे में जानकारी प्राप्त करने के लिए कहा जा सकता है।

module_info / 0

प्रत्येक मॉड्यूल में module_info/0 फ़ंक्शन, मॉड्यूल के बारे में जानकारी के साथ {Key,Value} टुपल्स की एक सूची देता है। वर्तमान में, सूची में निम्नलिखित Key साथ ट्यूपल शामिल हैं: module , attributes , compile , exports , md5 और native । पूर्व सूचना के बिना टुपल्स का क्रम और संख्या बदल सकती है।

module_info / 1

कॉल module_info(Key) , जहां Key एक परमाणु है, मॉड्यूल के बारे में जानकारी का एक टुकड़ा लौटाता है।

निम्नलिखित मानों को Key लिए अनुमति दी गई है:

module

मॉड्यूल नाम का एक परमाणु लौटाता है।

attributes

{AttributeName,ValueList} tuples की सूची लौटाता है, जहाँ AttributeName एक विशेषता का नाम है, और ValueList मूल्यों की एक सूची है। ध्यान दें कि यदि दी गई विशेषता मॉड्यूल में एक से अधिक बार होती है, तो विभिन्न मानों के साथ सूची में एक से अधिक बार हो सकता है।

विशेषताओं की सूची खाली हो जाती है यदि मॉड्यूल beam_lib(3) मॉड्यूल (STDLIB में) के साथ छीन लिया जाता है।

compile

मॉड्यूल कैसे संकलित किया गया था, इस बारे में जानकारी के साथ ट्यूपल्स की सूची लौटाता है। यह सूची खाली है यदि मॉड्यूल को beam_lib(3) मॉड्यूल (STDLIB में) के साथ छीन लिया गया है।

md5

मॉड्यूल के एमडी 5 चेकसम का प्रतिनिधित्व करने वाला एक बाइनरी देता है। यदि मॉड्यूल में देशी कोड लोड किया गया है, तो यह बीईएम बायटेकोड नहीं, बल्कि देशी कोड का एमडी 5 होगा।

exports

मॉड्यूल में सभी निर्यात किए गए कार्यों के साथ {Name,Arity} tuples की सूची लौटाता है।

functions

मॉड्यूल में सभी कार्यों के साथ {Name,Arity} की सूची देता है।

nifs

मॉड्यूल में सभी {Name,Arity} कार्यों के साथ {Name,Arity} tuples की सूची देता है।

native

यदि मॉड्यूल मूल संकलित कोड है तो true लौटें। अन्यथा false लौटो। HiPE समर्थन के बिना संकलित प्रणाली में, परिणाम हमेशा false