變量shell
變量必須以大寫字母開頭。在erlang裏,變量就像數學裏的那樣。當關聯一個值與變量時,所下的是一種斷言,也就是事實的陳述。這個變量就是那個值,僅此而已。編程
對X=1234這個簡單語句所帶有的兩種假設。ide
首先, X不是一個變量,不是你習慣的Java和C等語言裏的概念this
其次,=不是一個賦值操做符,而是一個模式匹配操做符。spa
This behavior of the =
operator is the basis of something called 'Pattern matching',rest
What this operator does when mixed with variables is that if the left-hand side term is a variable and it is unbound (has no value associated to it), Erlang will automatically bind the right-hand side value to the variable on the left-hand side. The comparison will consequently succeed and the variable will keep the value in memory.
code
即對於 「Lhs = Rhs」這樣一個式子。其先對Rhs求值,再將其結果與左端Lhs進行模式匹對。
ci
在erlang裏,變量得到值是一次成功模式匹配的操做結果。字符串
Technically, variables can start with an underscore ('_') too, but by convention their use is restricted to values you do not care about, yet you felt it was necessary to document what it contains.underscore
You can also have variables that are only an underscore:
2> _ = 1+3. 4 3> _. * 1: variable '_' is unbound
The _ variable is always seen as unbound and acts as a wildcard for pattern matching.
變量「_」是不綁定的,既沒有值, 在模式匹配中能夠做爲通配符使用。
2、 原子
在erlang裏,原子被用於表示常量。至關於C語言中的宏定義。原子以小寫字母開頭,後接一個串字母,數字,下劃線(_ )或者@,若是不是以小寫字母開頭,或是小寫字母以外的符號開頭,原子能夠放在單引號(' )內。如'Monday','_name'等。
在某些語言裏,單引號和雙引號能夠互換使用。Erlang裏不是這樣的。單引號的用法如上面所說,雙引號用於給字符串字面量(string literal)定界。
3、 元組
若是想把一些數量固定的項目歸組成單一的實體,就會使用元組(tuple)。建立元組的方法是用大括號{}把想要表示的值括起來,並用逗號分隔它們。
爲了容易記住元組的用途,一種經常使用的作法是將原子做爲元組的第一個元素,用它來表示元組是什麼。這種給元組貼標籤的方式不是語言所要求的,而是一種推薦的編程風格。
看看下面的例子,每一個語句分別表明了什麼意思?爲何有的時候匹配不成功?
1> P = {10 , 5}. %%給變量P綁定一個元組 {10,5} 2> P = { point, 10, 5}. %%再次給P賦值,則是匹配不成功,變量得到值是一次成功模式匹配的操做結果。 ** exception error: no match of right hand side value {point,10,5} 3> P1 = {point, 10, 5}. %%使用令一個變量還綁定元組 {point,10,5} 4> {point1, X, Y} = P1. %%不匹配的緣由是由於point1和 point是不一樣的原子。原子表示的是常量。 ** exception error: no match of right hand side value {point,10,5} 5> {point, X, Y} = P1. %%匹配成功,變量X,Y分別綁定十、5 {point,10,5} 6> X. 10 7> Y. 5 8> X= 20. %%再次給X綁定值則不成功,由於變量X綁定了值了。 ** exception error: no match of right hand side value 20
明白了上面的例子,就簡單的理解了在Erlang裏變量,原子,元組的基本的概念。
這個連接講數據類型等講的的超好:http://learnyousomeerlang.com/starting-out-for-real