2

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

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

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

2 回答 2

5

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

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

""test""是语法错误,与语法错误没有"" test ""区别<list><atom><list>。你想达到什么目的?

于 2012-10-29T22:52:22.887 回答
2

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

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

list_to_existing_atom/1如果原子不存在,将抛出错误,如果存在则返回原子。类似的构造与 a或块catch list_to_existing_atom(some_atom)结合使用可能会很有用。在 shell 中尝试一下,看看你最喜欢什么。case .. oftry ... catch

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

我必须编写一个从键盘读取直到输入原子的函数。我必须用 get_line 和 list_to_atom 来做这件事。– 奥蒂诺萨

于 2013-09-25T11:22:12.100 回答