2012-02-17 93 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]).