- Elixir 教程
- Elixir - 首页
- Elixir - 概述
- Elixir - 环境
- Elixir - 基本语法
- Elixir - 数据类型
- Elixir - 变量
- Elixir - 运算符
- Elixir - 模式匹配
- Elixir - 决策
- Elixir - 字符串
- Elixir - 字符列表
- Elixir - 列表和元组
- Elixir - 关键字列表
- Elixir - 映射
- Elixir - 模块
- Elixir - 别名
- Elixir - 函数
- Elixir - 递归
- Elixir - 循环
- Elixir - 可枚举
- Elixir - 流
- Elixir - 结构体
- Elixir - 协议
- Elixir - 文件 I/O
- Elixir - 进程
- Elixir - 符号
- Elixir - 推导式
- Elixir - 类型规范
- Elixir - 行为
- Elixir - 错误处理
- Elixir - 宏
- Elixir - 库
- Elixir 有用资源
- Elixir - 快速指南
- Elixir - 有用资源
- Elixir - 讨论
Elixir - 库
Elixir 与 Erlang 库具有极佳的互操作性。让我们简要讨论几个库。
Binary 模块
内置的 Elixir String 模块处理以 UTF-8 编码的二进制数据。当处理不一定是 UTF-8 编码的二进制数据时,binary 模块很有用。让我们考虑一个示例以进一步了解 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 模块包含常见的数学运算,涵盖三角函数、指数和对数函数。让我们考虑以下示例以了解 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 模块
队列是一种数据结构,它有效地实现了 (双端) FIFO (先进先出) 队列。以下示例显示了 Queue 模块的工作原理 -
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
广告