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