Elixir中下划线`_`的行为

时间:2016-08-09 07:42:32

标签: elixir

我正在探索Elixir并且遇到了关于下划线的一些相当奇怪的事情。我们使用它来匹配任何变量并将其丢弃,因为Elixir认为它永久未绑定:

iex(38)> _
** (CompileError) iex:38: unbound variable _

但是当我将一些东西分配给下划线时,该值的回应方式与正常变量绑定的情况相同:

iex(38)> x = 10
10
iex(39)> _ = 10
10

在第二种情况下回复10,shell意味着什么?

4 个答案:

答案 0 :(得分:4)

=运算符在执行模式匹配后返回RHS的值。在这种情况下,10会被忽略,因为它已分配给_,但整个表达式的返回值仍为10

答案 1 :(得分:2)

Elixir中的每个表达式都将返回一个值。当模式匹配时,它将返回右侧值。

_ = 10  # return 10 as RHS value

考虑到这一点,你可以将比赛链接在一起。

iex(1)> {date, time} = local_time = :calendar.local_time
{{2016, 8, 9}, {7, 43, 11}}

iex(2)> date
{2016, 8, 9}

iex(3)> time
{7, 43, 11}

iex(4)> local_time
{{2016, 8, 9}, {7, 43, 11}}

答案 2 :(得分:1)

10是表达式_ = 10的结果。

Elixir中的所有内容都是一个表达式,所以一切都返回一个值。

答案 3 :(得分:0)

一般在Elixir中,当你在模式匹配中使用_时,你并不关心这个值。

返回表达式的值,即10