2016-08-09 9 views
2

私はエリクシールを探検していて、アンダースコアについてはむしろ奇妙なことに出くわしました。 エリクシールのアンダースコア `_`の動作

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の結果です。

エリクシルのすべてが式なので、すべてが値を返します。

0

一般に、エリクサーでは、パターンマッチングで_を使用すると、この値は気にしません。

ここでは、式の値が返されます。これは10です。

1

エリクシルのすべての式は値を返します。パターンマッチングすると、右側の値が返されます。

_ = 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}} 
関連する問題