2016-08-09 25 views
2

我正在探索Elixir,并且遇到了有关下划线的奇怪事情。我们用它来搭配任何变量并丢弃,因为药剂认为永久绑定:Elixir中下划线'_`的行为

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

但是当我分配的东西强调,价值得到呼应它在正常的变量绑定的情况下,以同样的方式:

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

什么是壳在第二种情况下呼应10是什么意思?

回答

2

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

+0

谢谢!这个答案更相关,因为它指定返回的值是右边的。 – dotslash

1

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

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

0

通常在Elixir中,当你在模式匹配中使用_时,你并不在意这个值。

这里返回表达式的值,即10

1

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}}