Elixir Language
स्थिरांक
खोज…
टिप्पणियों
तो यह एक सारांश विश्लेषण है जो मैंने सूचीबद्ध तरीकों के आधार पर किया है कि आप एलिक्सिर मॉड्यूल में स्थिरांक कैसे परिभाषित करते हैं? । मैं इसे कुछ कारणों से पोस्ट कर रहा हूं:
- अधिकांश अमृत दस्तावेज काफी गहन हैं, लेकिन मुझे यह महत्वपूर्ण वास्तु निर्णय मार्गदर्शन की कमी के कारण मिला - इसलिए मैंने इसे एक विषय के रूप में अनुरोध किया होगा।
- मैं इस विषय के बारे में दूसरों से थोड़ी दृश्यता और टिप्पणियाँ प्राप्त करना चाहता था।
- मैं नए एसओ डॉक्यूमेंटेशन वर्कफ़्लो का परीक्षण करना चाहता था। ;)
मैंने पूरा कोड GitHub repo elixir-constants-concept पर भी अपलोड किया है।
मॉड्यूल-स्कॉप्ड कॉन्स्टेंट
defmodule MyModule do
@my_favorite_number 13
@use_snake_case "This is a string (use double-quotes)"
end
ये केवल इस मॉड्यूल के भीतर से सुलभ हैं।
कार्यों के रूप में लगातार
घोषित:
defmodule MyApp.ViaFunctions.Constants do
def app_version, do: "0.0.1"
def app_author, do: "Felix Orr"
def app_info, do: [app_version, app_author]
def bar, do: "barrific constant in function"
end
आवश्यकता के साथ उपभोग करें:
defmodule MyApp.ViaFunctions.ConsumeWithRequire do
require MyApp.ViaFunctions.Constants
def foo() do
IO.puts MyApp.ViaFunctions.Constants.app_version
IO.puts MyApp.ViaFunctions.Constants.app_author
IO.puts inspect MyApp.ViaFunctions.Constants.app_info
end
# This generates a compiler error, cannot invoke `bar/0` inside a guard.
# def foo(_bar) when is_bitstring(bar) do
# IO.puts "We just used bar in a guard: #{bar}"
# end
end
आयात के साथ उपभोग करें:
defmodule MyApp.ViaFunctions.ConsumeWithImport do
import MyApp.ViaFunctions.Constants
def foo() do
IO.puts app_version
IO.puts app_author
IO.puts inspect app_info
end
end
यह विधि परियोजनाओं के दौरान स्थिरांक के पुन: उपयोग के लिए अनुमति देती है, लेकिन वे गार्ड कार्यों के लिए उपयोग करने योग्य नहीं होंगे जिनके लिए संकलन-समय की आवश्यकता होती है।
मैक्रो के माध्यम से निरंतर
घोषित:
defmodule MyApp.ViaMacros.Constants do
@moduledoc """
Apply with `use MyApp.ViaMacros.Constants, :app` or `import MyApp.ViaMacros.Constants, :app`.
Each constant is private to avoid ambiguity when importing multiple modules
that each have their own copies of these constants.
"""
def app do
quote do
# This method allows sharing module constants which can be used in guards.
@bar "barrific module constant"
defp app_version, do: "0.0.1"
defp app_author, do: "Felix Orr"
defp app_info, do: [app_version, app_author]
end
end
defmacro __using__(which) when is_atom(which) do
apply(__MODULE__, which, [])
end
end
use
साथ उपभोग use
:
defmodule MyApp.ViaMacros.ConsumeWithUse do
use MyApp.ViaMacros.Constants, :app
def foo() do
IO.puts app_version
IO.puts app_author
IO.puts inspect app_info
end
def foo(_bar) when is_bitstring(@bar) do
IO.puts "We just used bar in a guard: #{@bar}"
end
end
यह विधि आपको गार्ड के अंदर @some_constant
का उपयोग करने की अनुमति देती है। मुझे यह भी पक्का नहीं है कि फ़ंक्शन कड़ाई से आवश्यक होंगे।
Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow