Elixir 1.7

EEx




elixir

EEx

EEx एंबेडेड अमृत के लिए खड़ा है। यह आपको एक मजबूत तरीके से एक स्ट्रिंग के अंदर अमृत कोड एम्बेड करने की अनुमति देता है।

iex> EEx.eval_string("foo <%= bar %>", bar: "baz")
"foo baz"

एपीआई

यह मॉड्यूल आपको उपयोग करने के लिए 3 मुख्य एपीआई प्रदान करता है:

  1. सीधे एक स्ट्रिंग ( eval_string ) या एक फ़ाइल ( eval_file ) का eval_file करें। यह उपयोग करने के लिए सबसे सरल एपीआई है लेकिन सबसे धीमी भी, क्योंकि कोड का मूल्यांकन किया गया है और पहले संकलित नहीं किया गया है।

  2. एक स्ट्रिंग ( function_from_string ) या एक फ़ाइल ( function_from_file ) से एक फ़ंक्शन को परिभाषित करें। यह आपको एक मॉड्यूल के अंदर फ़ंक्शन के रूप में टेम्पलेट को एम्बेड करने की अनुमति देता है जिसे तब संकलित किया जाएगा। यह पसंदीदा एपीआई है यदि आपके पास संकलन समय पर टेम्पलेट तक पहुंच है।

  3. एक स्ट्रिंग ( compile_string ) या एक फ़ाइल ( compile_file ) को Elixir सिंटैक्स ट्री में संकलित करें। यह उपर्युक्त दोनों फ़ंक्शन द्वारा उपयोग की जाने वाली एपीआई है और यदि आप संकलित टेम्पलेट को संभालने के अपने तरीके प्रदान करना चाहते हैं तो आपके लिए उपलब्ध है।

विकल्प

इस मॉड्यूल के सभी कार्य EEx- संबंधित विकल्पों को स्वीकार करते हैं। वो हैं:

  • :line - टेम्पलेट शुरू होने के रूप में इस्तेमाल की जाने वाली लाइन। 1 से चूक।
  • :file - टेम्पलेट में प्रयोग की जाने वाली फाइल। किसी फ़ाइल में दिए गए डिफॉल्ट्स को एक स्ट्रिंग से संकलन करते समय टेम्पलेट को "nofile" से पढ़ा जाता है।
  • :engine - संकलन के लिए उपयोग किया जाने वाला ईएक्सई इंजन।
  • :trim - उद्धरण टैग के ट्रिम व्हाट्सएप बाएं / दाएं

इंजन

EEx में इंजन की अवधारणा है जो आपको दिए गए स्ट्रिंग या फ़ाइल से निकाले गए कोड को संशोधित करने या बदलने की अनुमति देता है।

डिफ़ॉल्ट रूप से, EEx , EEx.SmartEngine का उपयोग करता है जो सरल EEx.Engine शीर्ष पर कुछ उपयुक्तता प्रदान करता है।

टैग

EEx.SmartEngine निम्नलिखित टैग का समर्थन करता है:

<% Elixir expression - inline with output %>
<%= Elixir expression - replace with result %>
<%% EEx quotation - returns the contents inside %>
<%# Comments - they are discarded from source %>

टेम्पलेट के लिए कुछ आउटपुट करने वाले सभी अभिव्यक्तियों को बराबर चिह्न ( = ) का उपयोग करना चाहिए । चूंकि अमृत में सब कुछ एक अभिव्यक्ति है, इसलिए इस नियम के लिए कोई अपवाद नहीं हैं। उदाहरण के लिए, जबकि कुछ टेम्प्लेट लैंग्वेज विशेष-केस में if/2 क्लॉज होने पर, उनका ईएक्सई में समान व्यवहार किया जाता है और उनके परिणाम को प्रिंट करने के लिए भी = आवश्यकता होती है:

<%= if true do %>
  It is obviously true
<% else %>
  This will never appear
<% end %>

ध्यान दें कि प्रत्येक टैग के लिए अलग-अलग इंजनों के अलग-अलग नियम हो सकते हैं। अन्य टैग भविष्य के संस्करणों में जोड़े जा सकते हैं।

मैक्रो

EEx.SmartEngine भी अपने टेम्पलेट में कुछ मैक्रोज़ जोड़ता है। एक उदाहरण @ मैक्रो है जो टेम्पलेट में आसान डेटा एक्सेस की अनुमति देता है:

iex> EEx.eval_string("<%= @foo %>", assigns: [foo: 1])
"1"

दूसरे शब्दों में, <%= @foo %> अनुवाद करता है:

<%= {:ok, v} = Access.fetch(assigns, :foo); v %>

assigns एक्सटेंशन उपयोगी है जब टेम्पलेट द्वारा आवश्यक चर की संख्या संकलन समय पर निर्दिष्ट नहीं की जाती है।

सारांश

कार्य

compile_file (फ़ाइल नाम, विकल्प \\ [])

एक filename और एक उद्धृत अभिव्यक्ति उत्पन्न करता है जिसे एलिक्सिर द्वारा मूल्यांकन किया जा सकता है या किसी फ़ंक्शन के लिए संकलित किया जा सकता है

compile_string (स्रोत, विकल्प \\ [])

एक स्ट्रिंग source और एक उद्धृत अभिव्यक्ति उत्पन्न करता है जिसका मूल्यांकन एलिक्सिर द्वारा किया जा सकता है या एक फ़ंक्शन के लिए संकलित किया जा सकता है

eval_file (फ़ाइल नाम, बाइंडिंग \\ [], विकल्प \\ [])

एक filename और bindings का उपयोग करके मूल्यों का मूल्यांकन करता है

eval_string (स्रोत, बाइंडिंग \\ [], विकल्प \\ [])

एक स्ट्रिंग source और bindings का उपयोग करके मूल्यों का मूल्यांकन करता है

function_from_file (तरह, नाम, फ़ाइल, args \\ [], विकल्प \\ [])

फ़ाइल सामग्री से एक फ़ंक्शन परिभाषा बनाता है

function_from_string (प्रकार, नाम, स्रोत, args \\ [], विकल्प \\ [])

स्ट्रिंग से फ़ंक्शन परिभाषा उत्पन्न करता है

कार्य

compile_file (फ़ाइल नाम, विकल्प \\ [])

compile_file(String.t(), keyword()) :: Macro.t() | no_return()

एक filename और एक उद्धृत अभिव्यक्ति उत्पन्न करता है जिसे एलिक्सिर द्वारा मूल्यांकन किया जा सकता है या किसी फ़ंक्शन के लिए संकलित किया जा सकता है।

compile_string (स्रोत, विकल्प \\ [])

compile_string(String.t(), keyword()) :: Macro.t() | no_return()

एक स्ट्रिंग source और एक उद्धृत अभिव्यक्ति उत्पन्न करता है जिसका मूल्यांकन एलिक्सिर द्वारा किया जा सकता है या एक फ़ंक्शन के लिए संकलित किया जा सकता है।

eval_file (फ़ाइल नाम, बाइंडिंग \\ [], विकल्प \\ [])

eval_file(String.t(), keyword(), keyword()) :: any()

एक filename और bindings का उपयोग करके मूल्यों का मूल्यांकन करता है।

उदाहरण

# sample.eex
foo <%= bar %>

# iex
EEx.eval_file "sample.eex", [bar: "baz"] #=> "foo baz"

eval_string (स्रोत, बाइंडिंग \\ [], विकल्प \\ [])

eval_string(String.t(), keyword(), keyword()) :: any()

एक स्ट्रिंग source और bindings का उपयोग करके मूल्यों का मूल्यांकन करता है।

उदाहरण

iex> EEx.eval_string("foo <%= bar %>", bar: "baz")
"foo baz"

function_from_file (प्रकार, नाम, फ़ाइल, args \\ [], विकल्प \\ []) (मैक्रो)

फ़ाइल सामग्री से एक फ़ंक्शन परिभाषा बनाता है।

प्रकार ( :def या :defp ) दिया जाना चाहिए, फ़ंक्शन का नाम, उसके तर्क और संकलन विकल्प।

यह फ़ंक्शन आपके पास टेम्पलेट्स के मामले में उपयोगी है, लेकिन आप गति के लिए एक मॉड्यूल के अंदर precompile करना चाहते हैं।

उदाहरण

# sample.eex
<%= a + b %>

# sample.ex
defmodule Sample do
  require EEx
  EEx.function_from_file :def, :sample, "sample.eex", [:a, :b]
end

# iex
Sample.sample(1, 2) #=> "3"

function_from_string (प्रकार, नाम, स्रोत, args \\ [], विकल्प \\ []) (मैक्रो)

स्ट्रिंग से फ़ंक्शन परिभाषा उत्पन्न करता है।

प्रकार ( :def या :defp ) दिया जाना चाहिए, फ़ंक्शन का नाम, उसके तर्क और संकलन विकल्प।

उदाहरण

iex> defmodule Sample do
...>   require EEx
...>   EEx.function_from_string :def, :sample, "<%= a + b %>", [:a, :b]
...> end
iex> Sample.sample(1, 2)
"3"