- 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 - Behave
- Elixir - 错误处理
- Elixir - 宏
- Elixir - 图书馆
- Elixir 有用资源
- Elixir - 快速指南
- Elixir - 有用的资源
- Elixir - 讨论
Elixir - 模式匹配
模式匹配是 Elixir 继承自 Erlang 的一项技术。这是一种非常强大的技术,允许我们从复杂的数据结构(如列表、元组、映射等)中提取更简单的子结构。
一场比赛有两个主要部分,左侧和右侧。右侧是任何类型的数据结构。左侧尝试匹配右侧的数据结构,并将左侧的任何变量绑定到右侧的相应子结构。如果未找到匹配项,操作员将引发错误。
最简单的匹配是左侧的单独变量和右侧的任何数据结构。该变量将匹配任何内容。例如,
x = 12 x = "Hello" IO.puts(x)
您可以将变量放置在结构内,以便捕获子结构。例如,
[var_1, _unused_var, var_2] = [{"First variable"}, 25, "Second variable" ] IO.puts(var_1) IO.puts(var_2)
这将在var_1中存储值{"First variable"},在var_2中存储 "Second variable"。还有一个特殊的_变量(或以 '_' 为前缀的变量),其工作方式与其他变量完全相同,但告诉 elixir,“确保这里有东西,但我不关心它到底是什么。” 。在前面的示例中,_unused_var就是这样一个变量。
我们可以使用这种技术来匹配更复杂的模式。例如,如果您想解开并获取元组中的一个数字,该数字位于列表中,而列表本身位于列表中,则可以使用以下命令 -
[_, [_, {a}]] = ["Random string", [:an_atom, {24}]] IO.puts(a)
上述程序生成以下结果 -
24
这会将a绑定到 24。当我们使用“_”时,其他值将被忽略。
在模式匹配中,如果我们使用右侧的变量,则使用它的值。如果您想使用左侧变量的值,则需要使用 pin 运算符。
例如,如果您有一个值为 25 的变量“a”,并且您想将其与另一个值为 25 的变量“b”匹配,那么您需要输入 -
a = 25 b = 25 ^a = b
最后一行匹配a的当前值,而不是将其分配给b的值。如果我们有一组不匹配的左侧和右侧,则匹配运算符会引发错误。例如,如果我们尝试将一个元组与一个列表进行匹配,或者将一个大小为 2 的列表与一个大小为 3 的列表进行匹配,则会显示错误。