erlang Elixir中的变量赋值

xxslljrj  于 2022-12-16  发布在  Erlang
关注(0)|答案(2)|浏览(190)

我有一个关于Elixir中变量赋值的问题。在Erlang中,这将引发no match of right hand side value

X = 4.
X = 2.

然而,在Elixir中多次为变量赋值似乎是完全可以的。我对模式匹配在Elixir中的工作原理感到困惑。Elixir如何区分模式匹配和变量赋值?据我所知,在Erlang中,X是一个未绑定变量,因此它可以与任何变量匹配,对吗?但是一旦绑定,模式匹配只有在它与X的值相同时才起作用。那么,Elixir与Erlang没有相同的无绑定变量概念吗?

vdgimpew

vdgimpew1#

是的,在这方面,Elixir并不遵循Erlang的概念。Elixir试图让不太熟悉函数式编程的开发人员更容易访问,尤其是Ruby开发人员。根据Pattern matching文档,您必须将变量:

iex(1)> x=4
4
iex(2)> ^x=2
** (MatchError) no match of right hand side value: 2

另外,注意变量在Elixir中必须以小写字母开头。

zvms9eto

zvms9eto2#

尝试使用链接中的知识来实际回答这个问题。Elixir不使用=操作符进行匹配,它执行的是一种称为rebinding的操作。代码示例显示了如何使Elixir像Erlang一样工作,这对我这样一个全新的语言用户来说是完全不合逻辑的。我希望将来能重新审视这个答案,写一些更好的东西:)。
所以当变量前面有^而不是rebinding时,Elixir使用模式匹配。我的问题是:在一大段代码中,那些人是如何跟踪第一次使用并使用这种符号的?如果有人能提供一个好的答案,那就太好了:)。

相关问题