有人可以請解釋一下我爲什麼第二條語句給出了badarg
?字符串爲二進制,常量和變量之間的轉換差異
感謝
42> <<"hello">>.
<<"hello">>
43> Content = "hello".
"hello"
44> <<Content>>.
** exception error: bad argument
有人可以請解釋一下我爲什麼第二條語句給出了badarg
?字符串爲二進制,常量和變量之間的轉換差異
感謝
42> <<"hello">>.
<<"hello">>
43> Content = "hello".
"hello"
44> <<Content>>.
** exception error: bad argument
<<"hello">>
只是一個特殊的語法來創建一個包含字符串中的字節字面二進制 - 它是<<$h, $e, $l, $l, $o>>
語法糖,而且它看起來像一個字符串的事實(即,字符列表)只是一個巧合。
如果字符串是一個變量,你不能將其插入直接二進制;你需要把它顯式轉換:
ContentBinary = list_to_binary(Content),
當你在控制檯或在節目類型< <「你好」 >>,它是一種捷徑,上面寫着採取列表中的「你好」恩將其轉換爲二進制文件。然後控制檯使用漂亮的打印格式來顯示它。
將內容定義爲列表「hello」時,語法快捷方式不再可用,並且erlang正在查找有效類型(Type = integer | float | binary | bytes | bitstring | bits | utf8 | utf16 | utf32)並找到一個列表,這就是爲什麼你得到這個不好的參數exeption。
以下項是正確的:
7> V1 = <<"hello">>.
<<"hello">>
8> V2 = "hello".
"hello"
9> V1 = list_to_binary(V2).
<<"hello">>