Elixir - 库
Elixir 提供了与 Erlang 库的出色互操作性。 让我们简要讨论几个库。
Binary 二进制模块
内置的 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 处理原始数据字节。
Crypto 加密模块
Crypto 加密模块包含哈希函数、数字签名、加密等。 该模块不是 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 数学模块
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
Queue 队列模块
Queue 队列是一种高效实现(双端)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