Erlang строка в атом и форматирование строки - PullRequest
7 голосов
/ 17 февраля 2012

Использование только 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?

Edit: Чтобы прояснить вопрос, существует больше значений, чем в примере выше, и в некоторых случаях это может быть строка или атом, например

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

, где первый параметр всегдастрока, но X может быть атомом или строкой.Третий параметр - это всегда число.

Ответы [ 3 ]

12 голосов
/ 17 февраля 2012

Если вы хотите получить плоский список для строк и целых чисел, использование ~s и ~B может быть смиренным:

lists:flatten(io_lib:format("PUTVALUE ~s ~B", ["Hello", 40])).  
10 голосов
/ 17 февраля 2012

В Эрланге атом начинается со строчной буквы.Чтобы атом начинался с заглавной буквы, он должен быть заключен в одинарные кавычки.

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

5 голосов
/ 18 февраля 2012

Вы можете использовать списки: concat для форматирования такой строки

 lists:concat(["PUTVALUE ",hello," ",40]).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...