如果沒有 erlang 環境,上面的指令會自定安裝 erlang 的環境。
/ 總是傳回浮點數,如果需要整數運算,使用 div 和 rem 函數
原子是一種常量,變量名就是它的值。有2種寫法:
:原子名
:"原子名"
清單中可以包含任意資料類型
清單可以通過 ++/– 來拼接
可以通過 hd/1 tl/1 函數來擷取頭部和頭部以外的部分
對一個空清單執行 hd/1 和 tl/1 會報錯
清單是以連結清單形式在記憶體存儲的,元組是在記憶體中連續存儲的。
清單前置拼接操作很快,後置拼接操作慢
後置拼接時修改了原清單的最後一個元素,是以會重建整個清單
函數的傳回值一般用元組來儲存
雙引号包裹的是字元串: 字元串中存儲的是 byte
單引号包裹的是字元清單: 字元清單中存儲的是每個字元的 codepoint
算術運算 + - * / div/2 rem/2
清單拼接 ++ –
字元串拼接 <>
布爾運算符
or and not 這3個運算符隻接受布爾值作為第一個參數
|| && ! 這3個運算符可以接受非布爾值作為第一個參數
比較運算符
<code>= !</code> <code>=</code> !== <= >= < >
<code>= !</code> 和 <code>=</code> !== 相比,後者的檢查更加嚴格
不同資料類型之間也可以比較大小
不同資料類型之間的預設的順序如下:
elixir 中 = 是模式比對運算符
可以給list 的 head 和 tail 指派
case的條件中可以加入判斷的表達式,比如下面的 (when x > 0)
隻會執行第一個比對上的分支
unless 和 if 相反,條件為false時才執行
do 語句快有2種寫法:
鍵值清單還有另一種定義方式:(注意 a: 和 1 之間必須有個空格)
鍵值清單2個特點:
有序
key 可以重複,重複時,優先取排在前面的key
圖的2個特點:
圖中的key是無序的
圖的key可以是任意類型
圖比對時,隻要 = 右邊包含左邊的值就能比對上
修改圖中的值可以用以下的方式:
以上的 鍵值清單 和 圖 都是 字典 ,它們都實作了 Dict 接口。
此子產品現在已經 deprecated
枚舉類型提供了大量函數來對清單進行操作
枚舉操作都是積極的,比如如下的操作:
以上每步的操作(Enum.map, Enum.filter)都會産生一個新的清單,這就是 積極 的意思。
和上面的枚舉類型對應,流的處理是 懶惰 的,比如:
表面上看,和枚舉類型的處理一樣,而實際上,流先建立了一系列的計算操作。然後僅當我們把它傳遞給Enum子產品,它才會被調用。
elixir中程序都是輕量級的,是以使用時不用太在意程序的數目。
派生的程序執行完自動結束自己
發送和接收消息
下面示例中是給自己發送了一條消息,可以通過 flush/1 函數重新整理消息,重新整理一次之後就
也可以通過 receive/1 函數來接收
receive/1 函數收不到消息會阻塞,可以給它設定一個逾時時間
程序間的連接配接
程序B連接配接程序A之後,程序A出現異常,程序B就能捕獲,這樣程序B就能處理程序A的異常
程序連接配接的方式很簡單,就是 spawn_link/1 函數
程序中儲存狀态的方法:
elixir中子產品的屬性主要有3個作用:
作為一個子產品的注釋,通常附加上使用者或虛拟機用到的資訊
作為常量
在編譯時作為一個臨時的子產品存儲
注釋時,一些常用的子產品屬性如下:
名稱
含義
@moduledoc
為目前子產品提供文檔
@doc
為該屬性後面的函數或宏提供文檔
@behaviour
(注意這個單詞是英式拼法)用來注明一個OTP或使用者自定義行為
@before\_compile
提供一個每當子產品被編譯之前執行的鈎子。這使得我們可以在子產品被編譯之前往裡面注入函數。
作為常量:
測試方法:
子產品中的變量隻在編譯時存在,是以用做臨時存儲,存儲一些隻在編譯時使用的變量。
示例:
定義
使用方式
協定類似于其他語言中的接口,誰實作了協定,誰就可以使用協定,
比如下面的例子,Integer 和 User 結構體實作了協定,就可以使用協定中的方法。
使用示例:
上面的 string 類型沒有實作協定,是以不能使用。
我們在實際使用中也不會對沒種類型都實作協定,為了避免出現異常,可以設定協定對所有類型的預設實作
這樣以後,如下使用就不會報錯了
自定義異常使用 defexception/1 函數,
elixir 雖然提供了 try/catch/rescue/after 的結構,但是盡量不要使用這種結構,使用這種異常處理方式,會影響現有程式的處理流程。
elixir 的很多函數都會傳回錯誤信号,通過信号來處理錯誤是推薦的方式(類似golang的錯誤處理),比如如下示例:
速構的意思也就是從一個清單友善的生成另一個清單。
生成器
過濾器
二進制轉化為元組
into
删除空格
sigils 也就是對已有的變量或者常量做一些标記,使之變為其他的東西。
sigils 的目的就是提高 elixir 語言的擴充性。
正規表達式中的使用
表示字元串,字元以及清單的示例
~w 還可以加入其他的修飾符(比如:c, s, a 分别代表字元清單,字元串,原子)
自定義 sigils
本文轉自wang_yb部落格園部落格,原文連結:http://www.cnblogs.com/wang_yb/p/5333019.html,如需轉載請自行聯系原作者