- 教程
- 概述
- 环境
- Basic 语法
- 数据类型
- 变量
- 运算符
- 模式匹配( Pattern Matching)
- 决策( Decision Making)
- Strings( Strings)
- Char Lists( Char Lists)
- 列表和元组( Lists and Tuples)
- 关键字列表( Keyword Lists)
- Maps
- 模块( Modules)
- 别名( Aliases)
- 功能( Functions)
- 递归
- 循环
- Enumerables( Enumerables)
- Streams( Streams)
- Structs( Structs)
- 协议 Protocols
- File I/O
- 进程( Processes)
- Sigils( Sigils)
- 理解( Comprehensions)
- Typespecs( Typespecs)
- 行为( Behaviours)
- 错误处理( Errors Handling)
- Macros( Macros)
- (库)Libraries
- 有用的资源
- 讨论
- Show 例子
- Show 例子
- Show 例子
- Show 例子
- Show 例子
- if statement
- if..else statement
- unless statement
- unless..else statement
- cond
- case
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
(库)Libraries
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代码点,而:binary处理原始数据字节。
加密模块
加密模块包含散列函数,数字签名,加密等。 此模块不是Erlang标准库的一部分,但包含在Erlang发行版中。 这意味着您必须在项目的应用程序列表中列出:crypto,无论何时使用它。 让我们看一个使用加密模块的例子 -
IO.puts(Base.encode16(:crypto.hash(:sha256, "Elixir")))
运行上述程序时,会产生以下结果 -
3315715A7A3AD57428298676C5AE465DADA38D951BDFAC9348A8A31E9C7401CB
有向图模块
有向图模块包含用于处理由顶点和边构建的有向图的函数。 在构建图形之后,其中的算法将有助于找到例如图形中两个顶点或循环之间的最短路径。 请注意, in :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(先进先出)队列的数据结构。 以下示例显示了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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论