我正在探索Elixir并且遇到了关于下划线的一些相当奇怪的事情。我们使用它来匹配任何变量并将其丢弃,因为Elixir认为它永久未绑定:
iex(38)> _
** (CompileError) iex:38: unbound variable _
但是当我将一些东西分配给下划线时,该值的回应方式与正常变量绑定的情况相同:
iex(38)> x = 10
10
iex(39)> _ = 10
10
在第二种情况下回复10
,shell意味着什么?
答案 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
。