Erlang那些事儿第1回之我是变量,一次赋值永不改变

  第1回先从不变的变量说开来,学过其余编程语言的人都知道,变量之因此叫变量,是由于它会常常变,被修改。假设本来X  = 10,后来再执行X = 24,那么X就从10变成了24,这对于程序新手和老鸟来讲,都是永恒不变的真理。可是若是你写Erlang代码还这么认为的话,那么你就错了,大错特错,还会致使编译失败。如今请把你从其余编程语言学的特性忘掉,把本身变成一张白纸,让咱们回一趟小学书本,看下解方程的例子。shell

  知识点1:变量不可变编程

记得上学的时候,数学老师曾说过:“若是一个等式中有好几处X,那么全部X都是同样的”。举个例子,以下:async

题目:二元一次方程,请计算X和Y分别是多少?
X + Y = 10 X - Y = 2

解:
由于X - Y = 2,因此能够得出:Y = X - 2,
将Y代入第一个方程,会变成
X + X - 2 = 10,
再精简成:
2X = 12,因此X = 12/2 = 6
Y = X - 2 = 6 - 2 = 4。

  从上面的方程能够计算得出X等于6,Y等于4,那么X还能是其余值吗?答案是确定不行,若是你把X改为7,那么上面的二元一次方程怎么算都是错的。若是还不能理解,那么先尝试着接受新思想,旧思想有旧思想的好处,新思想有新思想的好处,旧的不去新的不来。编程语言

  实验1:变量不可被修改ide

Erlang/OTP 23 [erts-11.1.3] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe] [dtrace]

Eshell V11.1.3  (abort with ^G)
1> X = 6.
6
2> X.
6
3> X = 7.
** exception error: no match of right hand side value 7

  X被赋值为6以后,若是再赋值为7,那么就会报错:no match,意思是X与7不能匹配,因此X = 6并非赋值,而是进行了一次模式匹配。命令①表示X与6进行匹配,此次匹配是成功的,因此X绑定了6,因此X等于6。spa

  知识点2:特殊的下划线变量code

  下划线变量会被编译器特殊对待,既能够用来当占位符,跳过不关心的赋值,也能够用来避免unused的编译警告。既然是能够用来忽略没必要要的赋值,那么下划线变量能够一直被赋值,而不会报错。blog

  实验2:能够一直被赋值的下划线变量ip

Erlang/OTP 23 [erts-11.1.3] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe] [dtrace]

Eshell V11.1.3  (abort with ^G)
1> _ = 10.
10
2> _ = 24.
24
3> _.
* 1: variable '_' is unbound

  下划线第一次被赋值为10,第二次被赋值为24,不会报错,验证了上面说的结论:能够一直被赋值。ci

  可是当咱们要把下划线打印出来的时候,会获得一个错误信息,意思是下划线没有被绑定,因此证实了下划线只是忽略了一次赋值(匹配)。

  在Erlang编程中,一切皆是模式匹配,无处不在,几乎每一行代码都会应用模式匹配,之后的每一回会对不一样的数据类型进行模式匹配的实践。

  下一回将介绍模块(Module)的使用,且听下回分解。

  

 

  做者: snowcicada
  本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。
相关文章
相关标签/搜索