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

mbs*_*ikh 9 erlang

使用just list_to_atom()给出:

list_to_atom("hello"). 
hello
list_to_atom("Hello").
'Hello'
Run Code Online (Sandbox Code Playgroud)

为什么差异?

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

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"
Run Code Online (Sandbox Code Playgroud)

在Erlang中这样做的最佳方式是什么?

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

lists:flatten(io_lib:format("PUTVALUE ~p ~p ~p", [list_to_atom("hello"), X, 40])).
Run Code Online (Sandbox Code Playgroud)

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

Kem*_*lah 12

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

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


shi*_*ino 12

如果你想得到一个字符串和整数的平面列表,使用~s~B可能是straitforward:

lists:flatten(io_lib:format("PUTVALUE ~s ~B", ["Hello", 40])).  
Run Code Online (Sandbox Code Playgroud)

  • +1非常真实.这避免了原子的产生 (2认同)
  • 原子由“~s”或“~p”格式化。通过`~s`,结果不被单引号字符引用。请参阅 http://www.erlang.org/doc/man/io.html#format-1 以获取完整参考。 (2认同)

Odo*_*rus 6

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

 lists:concat(["PUTVALUE ",hello," ",40]).
Run Code Online (Sandbox Code Playgroud)