Elixir रिप्रेज़ेंटर हल पर जो नॉर्मलाइज़ेशन लागू करता है, उसका अवलोकन।
Elixir रिप्रेज़ेंटर कई तरह के नॉर्मलाइज़ेशन लागू करता है। ब्यौरे के लिए कृपया कोड या टेस्ट डेटा देखिए।
सारे कमेंट, डॉक, मॉड्यूलडॉक और टाइपडॉक हटा दिए जाते हैं।
defmodule Fake do
@moduledoc """
Fake module to demonstrate stuff
"""
@doc "Not much to see here"
def foo do
# TODO: return bar
nil
end
end
defmodule Fake do
def foo do
nil
end
end
मॉड्यूल या फंक्शन के ऊपर लिखे इम्पोर्ट स्टेटमेंट इस क्रम में रखे जाते हैं: alias, use, require, import.
defmodule Fake do
import D
alias A.U.V
use B
alias A.{T, S}
require C
def foo do
import Z
alias X
use Y
end
import NotTouched
alias NotTouched
end
defmodule Fake do
alias A.{S, T}
alias A.U.V
use B
require C
import D
def foo do
alias X
use Y
import Z
end
import NotTouched
alias NotTouched
end
कोड को [mix code][mix-code] की मदद से फॉर्मैट किया जाता है, जिसमें do end ब्लॉक अनिवार्य होते हैं। पाइप में लिखे सारे फंक्शन ब्रैकेट के साथ लिखे जाते हैं, और टाइप बिना ब्रैकेट के।
defmodule Fake do
@type foo() :: integer() | atom
def foo, do: nil |> bar
end
defmodule Fake do
@type foo() :: integer | atom
def foo do
nil |> bar()
end
end
आइडेंटिफायर को प्लेसहोल्डर वैल्यू में बदल दिया जाता है। कुछ खास वेरिएबल और मॉड्यूल एट्रिब्यूट (_, @spec, __MODULE__ आदि) नहीं बदले जाते। मैप, स्ट्रक्ट और कीवर्ड लिस्ट की चाबियाँ नॉर्मलाइज़ नहीं की जाती हैं।
defmodule Fake do
alias Fake, as: SuperFake
@my_constant 42
@impl true
def foo(bar) when is_integer(bar) do
bar + @my_constant
end
def foo(%{a: a} = bar) do
%{bar | a: a + @my_constant}
end
def foo(_), do: nil
end
defmodule Placeholder_1 do
alias Placeholder_1, as: Placeholder_2
@placeholder_6 42
@impl true
def placeholder_4(placeholder_5) when is_integer(placeholder_5) do
placeholder_5 + @placeholder_6
end
def placeholder_4(%{a: placeholder_7} = placeholder_5) do
%{placeholder_5 | a: placeholder_7 + @placeholder_6}
end
def placeholder_4(_) do
nil
end
end
मैप और स्ट्रक्ट की चाबियाँ क्रम में लगाई जाती हैं। कीवर्ड लिस्ट की चाबियाँ क्रम में नहीं लगाई जाती हैं।
defmodule Fake do
def foo do
%MyStruct{z: 3, y: 2, x: 1}
m = %{c: 3, a: 1, b: 2}
%{m | b: 20, a: 10}
[b: 2, a: 1]
end
end
defmodule Fake do
def foo do
%MyStruct{x: 1, y: 2, z: 3}
placeholder_3 = %{a: 1, b: 2, c: 3}
%{placeholder_3 | a: 10, b: 20}
[b: 2, a: 1]
end
end