अमृत - उपनाम
सॉफ्टवेयर पुन: उपयोग की सुविधा के लिए, अमृत तीन निर्देश प्रदान करता है - alias, require तथा import। यह एक मैक्रो प्रदान करता है जिसे उपयोग कहा जाता है जो नीचे संक्षेप में प्रस्तुत किया गया है -
# Alias the module so it can be called as Bar instead of Foo.Bar
alias Foo.Bar, as: Bar
# Ensure the module is compiled and available (usually for macros)
require Foo
# Import functions from Foo so they can be called without the `Foo.` prefix
import Foo
# Invokes the custom code defined in Foo as an extension point
use Foo
आइए अब प्रत्येक निर्देश के बारे में विस्तार से समझते हैं।
उपनाम
उपनाम निर्देश आपको किसी भी दिए गए मॉड्यूल नाम के लिए उपनाम सेट करने की अनुमति देता है। उदाहरण के लिए, यदि आप एक उपनाम देना चाहते हैं'Str' स्ट्रिंग मॉड्यूल के लिए, आप बस लिख सकते हैं -
alias String, as: Str
IO.puts(Str.length("Hello"))
उपरोक्त कार्यक्रम निम्नलिखित परिणाम उत्पन्न करता है -
5
को एक उपनाम दिया जाता है String मॉड्यूल के रूप में Str। अब जब हम Str शाब्दिक का उपयोग करके किसी भी फ़ंक्शन को कॉल करते हैं, तो यह वास्तव में इसका संदर्भ देता हैStringमापांक। यह तब बहुत मददगार होता है जब हम बहुत लंबे मॉड्यूल नामों का उपयोग करते हैं और उन लोगों को मौजूदा दायरे में स्थानापन्न करना चाहते हैं।
NOTE - उपनाम MUST बड़े अक्षर से शुरू करें।
उपनाम केवल भीतर मान्य हैं lexical scope उन्हें अंदर बुलाया जाता है। उदाहरण के लिए, यदि आपके पास फ़ाइल में 2 मॉड्यूल हैं और किसी एक मॉड्यूल के भीतर एक उपनाम बनाते हैं, तो दूसरा मॉड्यूल में उपनाम उपलब्ध नहीं होगा।
यदि आप अंतर्निहित मॉड्यूल का नाम देते हैं, जैसे स्ट्रिंग या ट्यूपल, किसी अन्य मॉड्यूल के उपनाम के रूप में, इनबिल्ट मॉड्यूल का उपयोग करने के लिए, आपको इसके साथ प्रस्तुत करने की आवश्यकता होगी "Elixir."। उदाहरण के लिए,
alias List, as: String
#Now when we use String we are actually using List.
#To use the string module:
IO.puts(Elixir.String.length("Hello"))
जब उपरोक्त कार्यक्रम चलाया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -
5
की आवश्यकता होती है
Elixir मेटा-प्रोग्रामिंग (कोड उत्पन्न करने वाला कोड) के लिए एक तंत्र के रूप में मैक्रोज़ प्रदान करता है।
मैक्रोज़ कोड का हिस्सा हैं जिन्हें संकलित समय पर निष्पादित और विस्तारित किया जाता है। इसका मतलब है, एक मैक्रो का उपयोग करने के लिए, हमें यह गारंटी देने की आवश्यकता है कि इसके मॉड्यूल और कार्यान्वयन संकलन के दौरान उपलब्ध हैं। इसके साथ किया जाता हैrequire निर्देश।
Integer.is_odd(3)
जब उपरोक्त कार्यक्रम चलाया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करेगा -
** (CompileError) iex:1: you must require Integer before invoking the macro Integer.is_odd/1
अमृत में, Integer.is_odd के रूप में परिभाषित किया गया है macro। इस मैक्रो को गार्ड के रूप में इस्तेमाल किया जा सकता है। इसका मतलब है कि, आह्वान करने के लिएInteger.is_odd, हमें इंटेगर मॉड्यूल की आवश्यकता होगी।
उपयोग require Integer कार्य करें और नीचे दिखाए अनुसार कार्यक्रम चलाएं।
require Integer
Integer.is_odd(3)
इस बार कार्यक्रम चलेगा और उत्पादन का उत्पादन निम्नानुसार करेगा: true।
सामान्य तौर पर, उपयोग से पहले एक मॉड्यूल की आवश्यकता नहीं होती है, सिवाय इसके कि हम उस मॉड्यूल में उपलब्ध मैक्रोज़ का उपयोग करना चाहते हैं। मैक्रो को कॉल करने का प्रयास जो लोड नहीं किया गया था, एक त्रुटि बढ़ाएगा। ध्यान दें कि अलियास निर्देश की तरह, इसके लिए भी आवश्यक रूप से स्कोप किया गया है । हम बाद के अध्याय में मैक्रोज़ के बारे में अधिक बात करेंगे।
आयात
हम उपयोग करते हैं importपूरी तरह से योग्य नाम का उपयोग किए बिना आसानी से अन्य मॉड्यूल से फ़ंक्शन या मैक्रोज़ तक पहुंचने का निर्देश। उदाहरण के लिए, यदि हम उपयोग करना चाहते हैंduplicate कई बार सूची मॉड्यूल से कार्य, हम बस इसे आयात कर सकते हैं।
import List, only: [duplicate: 2]
इस मामले में, हम सूची से केवल फ़ंक्शन डुप्लिकेट (तर्क सूची लंबाई 2 के साथ) आयात कर रहे हैं। हालांकि:only वैकल्पिक है, इसके उपयोग की सिफारिश की जाती है ताकि नाम स्थान के अंदर दिए गए मॉड्यूल के सभी कार्यों को आयात करने से बचा जा सके। :except कार्यों की सूची को छोड़कर मॉड्यूल में सब कुछ आयात करने के लिए एक विकल्प के रूप में भी दिया जा सकता है।
import निर्देश भी समर्थन करता है :macros तथा :functions को दिया जाए :only। उदाहरण के लिए, सभी मैक्रोज़ को आयात करने के लिए, एक उपयोगकर्ता लिख सकता है -
import Integer, only: :macros
ध्यान दें कि आयात भी है Lexically scopedबस आवश्यकता और उपनाम निर्देश की तरह। उस पर भी ध्यान दें'import'ing a module also 'require's it।
उपयोग
हालांकि एक निर्देश नहीं, use एक स्थूल रूप से संबंधित है requireजो आपको वर्तमान संदर्भ में एक मॉड्यूल का उपयोग करने की अनुमति देता है। उपयोग मैक्रो को अक्सर डेवलपर्स द्वारा बाहरी कार्यक्षमता को वर्तमान लेक्सिकल दायरे में लाने के लिए उपयोग किया जाता है, अक्सर मॉड्यूल। आइए एक उदाहरण के माध्यम से उपयोग निर्देश को समझते हैं -
defmodule Example do
use Feature, option: :value
end
उपयोग एक मैक्रो है जो उपरोक्त को रूपांतरित करता है -
defmodule Example do
require Feature
Feature.__using__(option: :value)
end
use Module पहले मॉड्यूल की आवश्यकता होती है और फिर कॉल की जाती है __using__मॉड्यूल पर मैक्रो। अमृत में महान रूपक क्षमताएँ होती हैं और संकलन समय पर कोड उत्पन्न करने के लिए इसमें मैक्रोज़ होते हैं। _ _Use__ मैक्रो को उपरोक्त उदाहरण में कहा जाता है, और कोड हमारे स्थानीय संदर्भ में इंजेक्ट किया जाता है। स्थानीय संदर्भ वह है जहां संकलन के समय उपयोग मैक्रो को बुलाया गया था।