पाइथन / जावा / गोलंग भाषाओं से पृष्ठभूमि के साथ, 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
कार्यों में इस्तेमाल किया जा करने के लिए लाता है और उन्हें अपने मॉड्यूल पर सार्वजनिक रूप से उजागर करता है