作者:潜伏在人间_144 | 来源:互联网 | 2023-05-20 07:50
我正在学习Elixir,我很好奇为什么会发生以下情况:
iex(4)> case {:one, :two} do
...(4)> {:four, :five} ->
...(4)> "This won't match"
...(4)> {:one, x} ->
...(4)> "This will match and bind `x` to `:two`"
...(4)> _ ->
...(4)> "This will match any value"
...(4)> end
"This will match and bind `x` to `:two`"
因此,如果在"模式匹配"示例中,为什么空变量会x
自动绑定到原子:two
并提供正匹配?这是第一次运行时x
不相等.:two
case
我只是没有理解究竟发生了什么.
谢谢.
1> Pascal..:
子句中的模式匹配(大小写或函数)执行与{:one, x} = {:one, :two}
(也是模式匹配)相同的操作.在第二种情况下,很明显您要测试2个表达式是否匹配,并且如果先前未绑定,则要绑定变量x.唯一的区别是,如果匹配在子句中失败(例如{:four, :five} = {:one, :two}
),如果任何前一个子句抛出异常,它将尝试下一个子句.
它是一个非常强大的功能,因为它使用非常少的行执行大量操作并使代码易于阅读.