- 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 继承的一项技术。它是一种非常强大的技术,允许我们从复杂的结构(如列表、元组、映射等)中提取更简单的子结构。
匹配有两个主要部分,左边和右边。右边是任何类型的结构。左边尝试匹配右边的结构,并将左边任何变量绑定到右边的相应子结构。如果找不到匹配项,运算符将引发错误。
最简单的匹配是左边是一个单独的变量,右边是任何结构。此变量将匹配任何内容。例如,
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)
这将把值{"First variable"}存储在var_1中,并将"Second variable"存储在var_2中。还有一个特殊的_变量(或以'_'为前缀的变量),它的作用与其他变量完全相同,但它告诉 elixir,“确保这里有一些东西,但我并不关心它到底是什么。”。在前面的示例中,_unused_var 就是这样的一个变量。
我们可以使用此技术匹配更复杂的模式。例如,如果您想解包并在一个元组中获取一个数字,该元组在一个列表中,该列表本身又在一个列表中,您可以使用以下命令:
[_, [_, {a}]] = ["Random string", [:an_atom, {24}]] IO.puts(a)
上述程序生成以下结果:
24
这将把a绑定到 24。其他值被忽略,因为我们使用了'_'。
在模式匹配中,如果我们在右边使用变量,则使用其值。如果要使用左边变量的值,则需要使用固定运算符。
例如,如果您有一个值为 25 的变量“a”,并且希望将其与另一个值为 25 的变量“b”匹配,则需要输入:
a = 25 b = 25 ^a = b
最后一行匹配a的当前值,而不是将其赋值给b的值。如果我们有一组不匹配的左右两侧,匹配运算符将引发错误。例如,如果我们尝试将元组与列表匹配,或者将大小为 2 的列表与大小为 3 的列表匹配,则会显示错误。
广告