【问题标题】:Erlang string to atom and formatting a stringErlang字符串到原子并格式化字符串
【发布时间】:2014-03-05 23:17:08
【问题描述】:

仅使用 list_to_atom() 给出:

list_to_atom("hello"). 
hello
list_to_atom("Hello").
'Hello'

为什么会有差异?

我正在尝试用数字、字符串和原子来格式化字符串,如下所示:

lists:flatten(io_lib:format("PUTVALUE ~p ~p", [list_to_atom("hello"), 40])).
"PUTVALUE hello 40"
lists:flatten(io_lib:format("PUTVALUE ~p ~p", [list_to_atom("Hello"), 40])).
"PUTVALUE 'Hello' 40"

在 Erlang 中最好的方法是什么?

编辑:为了让问题更清楚,有比上面的例子更多的值,在某些情况下,值可以是字符串或原子,比如

lists:flatten(io_lib:format("PUTVALUE ~p ~p ~p", [list_to_atom("hello"), X, 40])).

其中第一个参数始终是字符串,但X 可以是原子或字符串。第三个参数始终是一个数字。

【问题讨论】:

    标签: erlang


    【解决方案1】:

    在 Erlang 中,原子以小写字母开头。对于以大写字母开头的原子,必须用单引号括起来。

    http://www.erlang.org/doc/reference_manual/data_types.html#id66663

    【讨论】:

      【解决方案2】:

      如果您想获得字符串和整数的平面列表,使用~s~B 可能会很简单:

      lists:flatten(io_lib:format("PUTVALUE ~s ~B", ["Hello", 40])).  
      

      【讨论】:

      • 感谢您的帮助。如果其中一个参数可以是字符串或原子怎么办?
      • 原子由~s~p 格式化。通过~s,结果不被单引号字符引用。请参阅erlang.org/doc/man/io.html#format-1 以获取完整参考。
      【解决方案3】:

      你可以使用 lists:concat 来格式化这样的字符串

       lists:concat(["PUTVALUE ",hello," ",40]).
      

      【讨论】:

        猜你喜欢
        • 2014-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多