Использование только list_to_atom()
дает:Erlang строки на атом и форматирование строки
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?
Edit: Для того, чтобы этот вопрос ясно, есть больше значения, чем в примере выше, и в некоторых случаях значение может быть строкой или атом, как
lists:flatten(io_lib:format("PUTVALUE ~p ~p ~p", [list_to_atom("hello"), X, 40])).
, где первый параметр всегда строка, но X
может быть атомом или строкой. Третий параметр всегда является числом.
+1 очень верно. Это позволяет избежать создания атома. –
Спасибо за полезный ответ. что, если один из параметров может быть строкой или атомом? – mbsheikh
атомы форматируются либо '~ s', либо' ~ p'. По '~ s', результаты не цитируются символами одиночной кавычки. См. Http://www.erlang.org/doc/man/io.html#format-1 для полной справки. – shino