Erlang中\“和”之间有什么区别

时间:2012-10-29 22:37:41

标签: erlang escaping

在Erlang中,\"是一个转义字符,表示双引号。

我的问题是,"\"test\""""test""之间有什么区别?我问的原因是因为,我正在尝试处理list_to_atom错误:

> list_to_atom("\"test\"").
'"test"'
> list_to_atom(""test"").
* 1: syntax error before: test

2 个答案:

答案 0 :(得分:5)

""是长度为0的字符串/列表

在字符串的上下文中使用时,

\"只是一个转义的双引号。如果你想要一个只包含双引号的字符串(即\"),那么你可以这样做:"\""

""test""是语法错误,与语法"" test ""的{​​{1}}没有区别。你想要完成什么?

答案 1 :(得分:2)

不建议动态生成原子,因为它们从不被垃圾收集。

在阅读用户输入时,最好使用list_to_existing_atom/1。否则,你可能最终会耗尽内存(在一个运行得足够长的系统中;但是,嘿,这就是Erlang所用的系统,不是吗?)并使整个虚拟机崩溃。

list_to_existing_atom/1将在原子不存在时抛出错误并返回原子(如果存在)。像catch list_to_existing_atom(some_atom)这样的构造可能会与case .. oftry ... catch块一起使用。在shell中试一试,看看你最喜欢什么。

如果这个答案似乎与这个问题无关,那么请注意我还不能发表评论,所以这回答了对chops答案的评论中的问题,即:

  

我必须编写一个从键盘读取的函数,直到键入一个原子。   我必须使用get_line和list_to_atom执行此操作。 - otisonoza