2012-02-17 94 views
4

只需使用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" 

什么是二郎神这样做的最佳方式?

编辑:为了使问题清晰,有比上述和在一些情况下,值可以是一个字符串或一原子的例子更多的值,像

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

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

回答

9

如果你想获得字符串和整数平坦的列表,但使用~s~B可straitforward:

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

+1非常真实。这可以避免创建原子 – 2012-02-17 04:53:08

+0

感谢您的有用答案。如果其中一个参数可以是字符串或原子呢? – mbsheikh 2012-02-17 04:58:18

+1

原子被'〜s'或'〜p'格式化。按'〜s',结果不会被单引号字符引用。请参阅http://www.erlang.org/doc/man/io.html#format-1以获取完整参考。 – shino 2012-02-17 06:51:09

5

您可以使用列表:CONCAT格式化这样的字符串

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