पाइथन / जावा / गोलंग भाषाओं से पृष्ठभूमि के साथ, importबनाम useभी मेरे लिए भ्रमित था। यह कुछ घोषणा भाषाओं के साथ कोड पुन: उपयोग तंत्र की व्याख्या करेगा।
आयात
संक्षेप में, अमृत में, आपको मॉड्यूल आयात करने की आवश्यकता नहीं है। सभी सार्वजनिक कार्यों को पूर्ण-योग्य MODULE.FUNCTION सिंटैक्स द्वारा एक्सेस किया जा सकता है:
iex()> Integer.mod(5, 2)
1
iex()> String.trim(" Hello Elixir ")
"Hello Elixir"
Python / Java / Golang में, import MODULEइससे पहले कि आप उस MODULE, जैसे Python में फ़ंक्शन का उपयोग कर सकें
In []: import math
In []: math.sqrt(100)
Out[]: 10.0
तब क्या importअमृत में आपको आश्चर्य हो सकता है:
हम आयात का उपयोग तब करते हैं जब हम पूरी तरह से योग्य नाम का उपयोग किए बिना आसानी से अन्य मॉड्यूल से फ़ंक्शन या मैक्रोज़ तक पहुंचना चाहते हैं
https://elixir-lang.org/getting-started/alias-require-and-import.html#import
तो आप लिखना चाहते हैं, तो sqrtबजाय Integer.sqrt, trimके बजाय String.trim, importइच्छा मदद
iex()> import Integer
Integer
iex()> sqrt(100)
10.0
iex()> import String
String
iex()> trim(" Hello Elixir ")
"Hello Elixir"
इससे कोड को पढ़ने में समस्या हो सकती है और जब नाम-विरोधाभास होता है, तो एर्लांग (एलिक्स को प्रभावित करने वाली भाषा) में इसकी सिफारिश नहीं की जाती है। लेकिन एलिक्ज़िर में ऐसा कोई सम्मेलन नहीं है, आप इसे स्वयं के जोखिम पर उपयोग कर सकते हैं।
पायथन में, एक ही प्रभाव द्वारा किया जा सकता है:
from math import *
और यह केवल कुछ विशेष परिदृश्यों / इंटरैक्टिव मोड में उपयोग करने के लिए अनुशंसित है - छोटे / तेज टाइपिंग के लिए।
उपयोग और आवश्यकता है
क्या बनाता है use/ requireअलग है कि वे "मैक्रो" से संबंधित हैं - अवधारणा जो पायथन / जावा / गोलंग ... परिवार में मौजूद नहीं है।
आप की जरूरत नहीं है importअपने कार्यों का उपयोग करने के एक मॉड्यूल है, लेकिन आप की जरूरत है requireअपने मैक्रो का उपयोग करने के लिए एक मॉड्यूल :
iex()> Integer.mod(5, 3) # mod is a function
2
iex()> Integer.is_even(42)
** (CompileError) iex:3: you must require Integer before invoking the macro Integer.is_even/1
(elixir) src/elixir_dispatch.erl:97: :elixir_dispatch.dispatch_require/6
iex()> require Integer
Integer
iex()> Integer.is_even(42) # is_even is a macro
true
हालांकि is_evenइसे एक सामान्य कार्य के रूप में लिखा जा सकता है, यह एक मैक्रो है क्योंकि:
अमृत में, Integer.is_odd / 1 को एक मैक्रो के रूप में परिभाषित किया गया है ताकि इसे एक गार्ड के रूप में इस्तेमाल किया जा सके।
https://elixir-lang.org/getting-started/alias-require-and-import.html#require
use, अमृत का अंश:
उपयोग के लिए दिए गए मॉड्यूल की आवश्यकता होती है और फिर उस __using__/1पर कॉलबैक कॉल करता है जिससे मॉड्यूल वर्तमान संदर्भ में कुछ कोड को इंजेक्ट कर सकता है।
defmodule Example do
use Feature, option: :value
end
में संकलित है
defmodule Example do
require Feature
Feature.__using__(option: :value)
end
https://elixir-lang.org/getting-started/alias-require-and-import.html#use
इसलिए लिखना use Xउतना ही है जितना लिखना
require X
X.__using__()
use/2 मैक्रो है , मैक्रो आपके लिए कोड को अन्य कोड में बदल देगा।
आप use MODULEजब चाहेंगे :
- इसके मैक्रोज़ (
require) का उपयोग करना चाहते हैं
- और निष्पादित करें
MODULE.__using__()
एलिक्सिर 1.5 पर परीक्षण किया गया
import Moduleअपने मॉड्यूल के अंदर उपयोग किए जाने वाले कार्यों में लाता है।use Moduleकार्यों में इस्तेमाल किया जा करने के लिए लाता है और उन्हें अपने मॉड्यूल पर सार्वजनिक रूप से उजागर करता है