Elixir - Biblioteki

Elixir zapewnia doskonałą współpracę z bibliotekami Erlang. Omówmy pokrótce kilka bibliotek.

Moduł binarny

Wbudowany moduł Elixir String obsługuje pliki binarne zakodowane w UTF-8. Moduł binarny jest przydatny, gdy masz do czynienia z danymi binarnymi, które niekoniecznie są zakodowane w UTF-8. Rozważmy przykład, aby lepiej zrozumieć moduł binarny -

# UTF-8
IO.puts(String.to_char_list("Ø"))

# binary
IO.puts(:binary.bin_to_list "Ø")

Uruchomienie powyższego programu daje następujący wynik -

[216]
[195, 152]

Powyższy przykład pokazuje różnicę; moduł String zwraca punkty kodowe UTF-8, podczas gdy: binarny zajmuje się surowymi bajtami danych.

Moduł kryptograficzny

Moduł kryptograficzny zawiera funkcje haszujące, podpisy cyfrowe, szyfrowanie i nie tylko. Ten moduł nie jest częścią standardowej biblioteki Erlang, ale jest zawarty w dystrybucji Erlang. Oznacza to, że musisz wymienić: krypto na liście aplikacji projektu za każdym razem, gdy go używasz. Zobaczmy przykład wykorzystujący moduł kryptograficzny -

IO.puts(Base.encode16(:crypto.hash(:sha256, "Elixir")))

Uruchomienie powyższego programu daje następujący wynik -

3315715A7A3AD57428298676C5AE465DADA38D951BDFAC9348A8A31E9C7401CB

Moduł Digraph

Moduł digraf zawiera funkcje do obsługi grafów skierowanych zbudowanych z wierzchołków i krawędzi. Po skonstruowaniu wykresu algorytmy pomogą znaleźć na przykład najkrótszą ścieżkę między dwoma wierzchołkami lub pętlami na wykresie. Zwróć uwagę, że functionsin :digraph zmienić strukturę wykresu pośrednio jako efekt uboczny, zwracając jednocześnie dodane wierzchołki lub krawędzie.

digraph = :digraph.new()
coords = [{0.0, 0.0}, {1.0, 0.0}, {1.0, 1.0}]
[v0, v1, v2] = (for c <- coords, do: :digraph.add_vertex(digraph, c))
:digraph.add_edge(digraph, v0, v1)
:digraph.add_edge(digraph, v1, v2)
for point <- :digraph.get_short_path(digraph, v0, v2) do 
   {x, y} = point
   IO.puts("#{x}, #{y}")
end

Uruchomienie powyższego programu daje następujący wynik -

0.0, 0.0
1.0, 0.0
1.0, 1.0

Moduł matematyczny

Moduł matematyczny zawiera typowe operacje matematyczne obejmujące trygonometrię, funkcje wykładnicze i logarytmiczne. Rozważmy następujący przykład, aby zrozumieć, jak działa moduł Math -

# Value of pi
IO.puts(:math.pi())

# Logarithm
IO.puts(:math.log(7.694785265142018e23))

# Exponentiation
IO.puts(:math.exp(55.0))

#...

Uruchomienie powyższego programu daje następujący wynik -

3.141592653589793
55.0
7.694785265142018e23

Moduł kolejki

Kolejka jest strukturą danych, która efektywnie implementuje kolejki FIFO (pierwsze weszło, pierwsze wyszło) (dwustronnie zakończone). Poniższy przykład pokazuje, jak działa moduł kolejki -

q = :queue.new
q = :queue.in("A", q)
q = :queue.in("B", q)
{{:value, val}, q} = :queue.out(q)
IO.puts(val)
{{:value, val}, q} = :queue.out(q)
IO.puts(val)

Uruchomienie powyższego programu daje następujący wynik -

A
B