字符串为二进制,常量和变量之间的转换差异
问题描述:
有人可以请解释一下我为什么第二条语句给出了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">>