在erlang裏'_',它可以代替任何東西,在match的時候非常有用,例如
{A, _, [B|_], {B}} = {abc, 23, [22, 23], {22}}
這樣,就是把_當作一個佔位符,表示,match的時候這裏有一個值,但是我不關心他是什麼
在erlang裏,使用下劃線'_'開頭是有特殊含義的,告訴編譯器,這些變量是被忽略的,聲明瞭沒有使用/綁定也沒關係(否則,默認情況下編譯會報警的)
在使用下劃線開頭的量來標記可以忽略的量是一個不錯的主義,比如:
{Name,_Age}={"Argan",30}
這裏的_Age其實是我不關心的,因此使用一個_開頭的變量來做match,在閱讀代碼的時候,雖然其他的代碼裏不會用到_Age,但是一下就能看出來,這個數據結構,除了Name以外,還有一個值是Age,非常明確的表達
不過,因爲單一個'_'可以match任意的值,而且match出來的值是無法使用的,因此在表達式裏多次使用是沒關係的,例如第一個例子,但是,如果第一個例子修改成:
{A, _int, [B|_int], {B}} = {abc, 23, [22, 23], {22}}
就會出錯了,本意是想表達的更清楚,_int的地方是一個int值,但是這裏有一個陷阱,[Head|Tail]這樣的match,出來的結果的Tail是一個list,因此,上述表達式裏第一個_int的地方是一個int 23,第二個_int的地方實際上是一個list [23],因此上述表達式match會失敗。