Elixir обеспечивает отличную совместимость с библиотеками Erlang. Давайте кратко обсудим несколько библиотек.
Двоичный модуль
Встроенный модуль Elixir String обрабатывает двоичные файлы в кодировке UTF-8. Двоичный модуль полезен, когда вы имеете дело с двоичными данными, которые не обязательно кодируются в UTF-8. Давайте рассмотрим пример для дальнейшего понимания двоичного модуля —
# UTF-8 IO.puts(String.to_char_list("Ø")) # binary IO.puts(:binary.bin_to_list "Ø")
Когда вышеуказанная программа запущена, она дает следующий результат —
[216] [195, 152]
Приведенный выше пример показывает разницу; модуль String возвращает кодовые точки UTF-8, в то время как: двоичный файл обрабатывает необработанные байты данных.
Крипто модуль
Криптомодуль содержит функции хеширования, цифровые подписи, шифрование и многое другое. Этот модуль не является частью стандартной библиотеки Erlang, но включен в дистрибутив Erlang. Это означает, что вы должны указывать: crypto в списке приложений вашего проекта всякий раз, когда вы его используете. Давайте посмотрим на пример с использованием модуля crypto —
IO.puts(Base.encode16(:crypto.hash(:sha256, "Elixir")))
Когда вышеуказанная программа запущена, она дает следующий результат —
3315715A7A3AD57428298676C5AE465DADA38D951BDFAC9348A8A31E9C7401CB
Модуль Digraph
Модуль digraph содержит функции для работы с ориентированными графами, построенными из вершин и ребер. После построения графа алгоритмы в нем помогут найти, например, кратчайший путь между двумя вершинами или петлями в графе. Обратите внимание, что функции в: digraph косвенно изменяют структуру графа как побочный эффект, возвращая добавленные вершины или ребра.
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
Когда вышеуказанная программа запущена, она дает следующий результат —
0.0, 0.0 1.0, 0.0 1.0, 1.0
Математический модуль
Математический модуль содержит общие математические операции, охватывающие тригонометрию, экспоненциальные и логарифмические функции. Давайте рассмотрим следующий пример, чтобы понять, как работает модуль Math:
# Value of pi IO.puts(:math.pi()) # Logarithm IO.puts(:math.log(7.694785265142018e23)) # Exponentiation IO.puts(:math.exp(55.0)) #...
Когда вышеуказанная программа запущена, она дает следующий результат —
3.141592653589793 55.0 7.694785265142018e23
Модуль очереди
Очередь — это структура данных, которая эффективно реализует (двусторонние) очереди FIFO (первым пришел-первым вышел). В следующем примере показано, как работает модуль очереди.
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)
Когда вышеуказанная программа запущена, она дает следующий результат —