在 Erlang 中,\"
是一个转义字符,表示双引号。
"\"test\""
我的问题是,和有什么区别""test""
?我问的原因是因为,我正在尝试处理list_to_atom
错误:
> list_to_atom("\"test\"").
'"test"'
> list_to_atom(""test"").
* 1: syntax error before: test
""
是长度为 0 的字符串/列表
\"
在字符串的上下文中使用时只是一个转义的双引号。如果你想要一个只包含双引号(即\"
)的字符串,那么你可以这样做:"\""
。
""test""
是语法错误,与语法错误没有"" test ""
区别<list><atom><list>
。你想达到什么目的?
不建议动态生成原子,因为它们永远不会被垃圾收集。
list_to_existing_atom/1
阅读用户输入时最好使用。否则,你最终可能会耗尽内存(在一个运行足够长的系统中;但是,嘿,这就是 Erlang 的系统,不是吗?)并使整个虚拟机崩溃。
list_to_existing_atom/1
如果原子不存在,将抛出错误,如果存在则返回原子。类似的构造与 a或块catch list_to_existing_atom(some_atom)
结合使用可能会很有用。在 shell 中尝试一下,看看你最喜欢什么。case .. of
try ... catch
如果这个答案似乎与问题无关,那么请注意我还不允许发表评论,所以这回答了评论中对chops'答案的问题,即:
我必须编写一个从键盘读取直到输入原子的函数。我必须用 get_line 和 list_to_atom 来做这件事。– 奥蒂诺萨