Erlang --- 基本概念
在Erlang中有一些基本的概念,需要理清:
1、原子
在Erlang中,原子是一種僅由字符序列來標識的特殊字符串常量,因此兩個原子只要具有相同的字符表示,就完全等同。使用原子,無須事先說明,你可以隨意創建并隨處使用各種新的原子。
通常情況下,原子以小寫字母開頭,如ok,error,在首字母之后,可以使用大寫字母、數字、下劃線和@,如果還要用到其他字符,你就得給它們加上單引號(在shell中實驗發現 a == 'a')。
你應該把原子當做一類特殊的標簽,而不是普通的字符串,它們的長度上限是255個字符,在單個系統中原子的總數也有一個上限:目前是一百多萬(準確的說是1048576),原子一經創建,即使不再使用也永遠不會被清除,除非系統重啟,在程序中能不使用原子就不要用原子,因為原子很容易成為黑客攻擊的目標。
2、變量
Erlang變量最顯著的特點就在于變量名必須以大寫字母開頭!(以小寫字母開頭的是原子),變量名中的單詞以駝峰體隔開,這是Erlang變量的標準命名風格,如AddItem、RoleId,變量名也可以以下劃線開頭。這種情況下,按常規第二個字符通常應該是大寫字母:_Error,這兩種命名方式有一點小小的功能區別:賦值之后一直未被使用的變量往往會觸發編譯警告。這個機制可以幫我們發現大量低級錯誤,所以不要關閉這個警告,然而,如果使用某個變量的目的僅在于提高程序的可讀性,你便可以在變量名前加上一個下劃線,這樣一來即便這些變量不被使用,編譯器也不會報警,同時,所有未被使用的變量都會被優化掉,不會帶來額外的成本,你就可以毫無顧慮的以改善可讀性為目的的使用它們標注程序。
Erlang的變量被嚴格地限定為只能接受單次賦值,也就是說,變量一旦被賦值,變量就被綁定到某個值上,該變量在其整個作用域(即變量在程序中生效的范圍)內便一直持有這個值。在程序的不同位置可以重復使用同一變量名,但僅限于互不覆蓋的多個不同的作用域內,所指的當然也是不同的變量。=運算符就是模式匹配。
3、列表和字符串
我們用方括號表示列表,如[1,2,3],所以列表就是零個或多個Erlang項式(項式本身也可以是列表)的序列。如果添加列表新元素,如[5,4,3 | [2,1] ],新元素應從左側添加,另外,你也可以用++運算符向列表追加任意長度的列表,例如[1,2,3] ++ [4,5,6],最后得到[1,2,3,4,5,6],其過程也是一樣的,新元素從左側添加,也就是說,左側列表的長度決定了++運算符的耗時。
Erlang中雙引號字符串實際上就是列表,其元素就是該字符串中各字符的數值編碼所對應的整數。如"abcd",與它等價的列表是[97,98,99,100],還可以寫作[$a,$b,$c,$d],Erlang shell為了區別對待字符串和普通列表,會檢查列表的元素是否全部為可打印字符,如果是,就打印成雙引號字符串,否則就打印為整數列表。
4、元組和記錄
元組是其他Erlang項式的定長有序序列,元組用大括號來標識,如{1,2,3},這些元素可以是同一類型,也可以是不用的數據類型;這些元素本身也可以是元組或任意其他數據類型。記錄本質上就是標記元組,但避免了使用元組時增減字段所帶來的麻煩以及必須記住各個字段在元組中的順序的問題。
使用記錄時的第一要務就是寫下記錄聲明,如-record(customer,{name = "hua",address,phone}).該聲明告訴編譯器你將要使用一個四元組(3個字段加上標記),其中第一個元素總是原子customer。其他字段的順序與記錄聲明中一致,因為name總是第二個字段。
創建記錄時一定要在記錄名之前加上#,這樣編譯器才會將之與記錄聲明相匹配。如#customer{},在{...}之內,你可以選擇任意字段按任意順序進行賦值(一個都不選也行),編譯器會按聲明中的順序為他們排序,未賦值的那些字段將被置為默認值,即原子原子undefined,除非你在聲明中另行制定了默認值。
獲取記錄的數值,如Name = R#customer.name;更改記錄的數值,如R#customer{name = "zhen",address = "hai"}。
對于僅用于單個模塊中的記錄,一般直接將記錄聲明寫在模塊的頂部,和導出聲明及其他類似聲明一起放在模塊首部。然后如果要在多個模塊中使用同一個記錄聲明,那么你應該將這些需要共享的定義放在獨立的頭文件中,供所有需要這些定義的模塊讀取。這一切都有預處理器負責處理。
?
轉載于:https://www.cnblogs.com/hzy1987/p/5439230.html
總結
以上是生活随笔為你收集整理的Erlang --- 基本概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式之装饰模式的学习
- 下一篇: 0428 团队项目2.0