第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)的使用,且聽下回分解。