我不明白Elixir中的等号到底是什么意思。尚不清楚的是,它看起来像是分配和模式匹配操作之间的混合。
iex(1)> x=4
4
iex(2)> y=5
5
iex(3)> 3=y
** (MatchError) no match of right hand side value: 5
iex(3)> y=3
3
iex(4)> y=x
4
Run Code Online (Sandbox Code Playgroud)
我了解在Elixir中,等于运算符的意思是将=符号的左侧与右侧匹配。前两行对我来说很有意义。x和y是未绑定的变量,因此它们可以匹配任何内容。它们在匹配时受到约束。因此,我了解第三行。您不能将3与5相匹配。
我开始放松的地方是为什么在没有给出相同错误的情况下执行最后两行。看起来等号又回到了仅作为赋值运算符的地步。
在没有充分理解的情况下,我尝试将这种行为视为事实,并尝试进一步学习该语言。但是由于模式匹配是Elixir的核心机制之一,因此我不断锁定并感到应该回到最初的问题。在我完全理解“ =”符号的确切含义以及逻辑之后,我将不做任何进一步的介绍。
我正在学习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`"
Run Code Online (Sandbox Code Playgroud)
因此,如果在"模式匹配"示例中,为什么空变量会x
自动绑定到原子:two
并提供正匹配?这是第一次运行时x
不相等.:two
case
我只是没有理解究竟发生了什么.
谢谢.