📅  最后修改于: 2020-11-04 08:37:22             🧑  作者: Mango
Elixir提供了与Erlang库的出色互操作性。让我们简要讨论一些库。
内置的Elixir String模块处理UTF-8编码的二进制文件。当您处理不一定是UTF-8编码的二进制数据时,二进制模块很有用。让我们考虑一个示例以进一步理解Binary模块-
# UTF-8
IO.puts(String.to_char_list("Ø"))
# binary
IO.puts(:binary.bin_to_list "Ø")
运行上述程序时,将产生以下结果-
[216]
[195, 152]
上面的示例显示了区别; String模块返回UTF-8代码点,而:binary处理原始数据字节。
加密模块包含哈希函数,数字签名,加密等。该模块不是Erlang标准库的一部分,但包含在Erlang发行版中。这意味着您每次使用它时,都必须在项目的应用程序列表中列出:crypto。让我们看一个使用crypto模块的例子-
IO.puts(Base.encode16(:crypto.hash(:sha256, "Elixir")))
运行上述程序时,将产生以下结果-
3315715A7A3AD57428298676C5AE465DADA38D951BDFAC9348A8A31E9C7401CB
有向图模块包含用于处理由顶点和边构成的有向图的功能。构造完图形后,其中的算法将帮助查找例如两个顶点之间的最短路径或图形中的循环。注意::digraph中的函数会作为副作用间接更改图结构,同时返回添加的顶点或边。
digraph = :digraph.new()
coords = [{0.0, 0.0}, {1.0, 0.0}, {1.0, 1.0}]
[v0, v1, v2] = (for c
运行上述程序时,将产生以下结果-
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)
运行上述程序时,将产生以下结果-
A
B