erlang中下划线的使用

在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会失败。

 

转至:https://www.cnblogs.com/fvsfvs123/p/4208073.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章