- 教程
- 概述
- 环境
- 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
模式匹配( Pattern Matching)
模式匹配是Elixir从Erlang继承的技术。 这是一种非常强大的技术,它允许我们从复杂的数据结构中提取更简单的子结构,如列表,元组,映射等。
比赛有2个主要部分, left和right 。 右侧是任何类型的数据结构。 左侧尝试匹配右侧的数据结构,并将左侧的任何变量绑定到右侧的相应子结构。 如果未找到匹配项,则运算符会引发错误。
最简单的匹配是左侧的单个变量和右侧的任何数据结构。 This variable will match anything 。 例如,
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中var_2 "Second variable" 。 还有一个特殊的_变量(或以'_'为前缀的变量),其工作方式与其他变量完全相同,但告诉elixir, "Make sure something is here, but I don't care exactly what it is." 。 在前面的例子中, _unused_var就是这样一个变量。
我们可以使用这种技术匹配更复杂的模式。 example如果要打开并在列表中的元组中获取数字,该列表本身位于列表中,则可以使用以下命令 -
[_, [_, {a}]] = ["Random string", [:an_atom, {24}]]
IO.puts(a)
上述程序产生以下结果 -
24
这将绑定到24.其他值被忽略,因为我们使用'_'。
在模式匹配中,如果我们在right使用变量,则使用其值。 如果要使用左侧变量的值,则需要使用pin运算符。
例如,如果您的变量“a”的值为25,并且您希望将其与另一个值为25的变量“b”匹配,那么您需要输入 -
a = 25
b = 25
^a = b
最后一行匹配a的当前值,而不是将其赋值给b的值。 如果我们有一组不匹配的左侧和右侧,匹配运算符会引发错误。 例如,如果我们尝试将元组与列表或大小为2的列表与大小为3的列表进行匹配,则会显示错误。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论