1.原本是想實現這個功能:就是把<<"1">>變爲"1":編程
通常用模式匹配來提取函數
原本認爲Z="1"來着,結果打印Z爲49,而後打印"1"的結果卻爲「1」。spa
後來經咱們組的leader的引導:code
能夠看出[49]纔等於"1" 而49不等於"1" ,咱們直到由於在erlang編程下,字符串其實就是列表,而單個字符不是列表,單個字符是列表項中的每一項元素。orm
因此 你的兩個打印函數 等同於字符串
io:format("~p~n", [49]). io:format("~p~n", [[49]]).
爲何這個模式匹配沒有提出"1"呢?io
答:<<Z,_/binary>> = <<"1">>. 這個表達式其實就是列表的模式提取Z其編譯
實就是提取了列表頭(這句話是錯的),Z爲字符1,全部整數就49。form
Z就像是列表頭,提出來了以後,列表頭不是列表,而列表尾纔是列表erlang
好比[1,2,3,4,5] = [T|P] 列表頭T爲整數1,而不是列表[1],而列表爲P仍是一個列表爲[2,3,4,5]。
由此能夠得出本文開頭的那個問題的解決辦法:這個解決辦法是正確的
可是上面的解釋是錯的,其實<<"1">>裏面的"1"不是一個列表,只是代碼這個字符‘1’,而後底層用其ASII碼存起來就是49
總結:二進制類型裏面只有放整數和字符串,別的類型會失敗
整數:例如<<1,2,3>>表示底層1,2,3存放的8位二進制,
字符串:以下,其實就是其對應存放的ASCII碼
其二進制裏面的字符串還有下面的這種現象:
下面其實關於<<"1">>裏面的"1"表明字符'1'的ASCII碼與單獨的"1"字符串是列表的區別能夠經過一下圖也是能夠的:
P提取的是字符'1',其ASCII碼爲49,可是其實還有一個Q=[]空列表,因此字符串"1"其實就是[49]
再來看看<<"1">>的一樣用兩個來提取。
能夠看獲得Z提取的是字符'1',其ASCII碼爲49,和上面同樣,後面的Rest爲空二機制,不是空列表,能夠看出其區別,在二進制裏面的字符串不是列表。
2 在erlang裏面把整數1變爲字符串「1」
也就是列表[49],理解了這一點,就很容易作了,以下:
由於「1」實際上是列表[49],因此將將其放在列表裏面,而後加上48,就好了,別的數字加上對應的就能夠了
3字符串的鏈接
由於字符串在erlang裏面就是列表,因此能夠用這個字符++來鏈接,就像鏈接列表同樣,以下示例:
4 寫erlang列表數據到文件裏面可是不帶中括號[]
用io:format格式化輸出,~s: 打印字符串的時候會不帶[]和「」
下面有個大的例子,寫入列表的數據到文件,可是不要中括號[]
編譯erlc mylib_misc.erl,編譯好了以後去運行,效果以下:
後面補充,發現有內置函數,好比<<"1">>變爲「1」,有 binary_to_list ; 而後整數1變爲"1"有integer_to_list
實現起來就更爲簡單了
其實erlang各類數據類型之間的轉換,都有,下面有元組和列表之間的轉換,還有列表到二進制之間的轉換,由此能夠推出,應該各類類型之間的轉換都有