Erlang字符串到原子并格式化字符串

时间:2012-02-17 03:18:03

标签: erlang

仅使用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可以是原子或字符串。第三个参数始终是一个数字。

3 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:9)

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

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

答案 2 :(得分:5)

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

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