【问题标题】:What is the difference between \" and "" in ErlangErlang中的\"和""有什么区别
【发布时间】:2013-11-07 15:45:27
【问题描述】:

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

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

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

【问题讨论】:

    标签: erlang escaping


    【解决方案1】:

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

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

    ""test"" 是一个语法错误,与"" test "" 语法上的<list><atom><list> 没有区别。你想完成什么?

    【讨论】:

    • 我必须编写一个从键盘读取直到输入原子的函数。我必须用 get_line 和 list_to_atom 来做这件事。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-08-12
      • 2010-12-23
      • 1970-01-01
      • 2016-11-14
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多