Следующее, вероятно, не самый удачный способ, но он работает:
1> lists:flatten(io_lib:format("~p", [35365])).
"35365"
РЕДАКТИРОВАТЬ: я обнаружил, что полезна следующая функция:
%% string_format/2
%% Like io:format except it returns the evaluated string rather than write
%% it to standard output.
%% Parameters:
%% 1. format string similar to that used by io:format.
%% 2. list of values to supply to format string.
%% Returns:
%% Formatted string.
string_format(Pattern, Values) ->
lists:flatten(io_lib:format(Pattern, Values)).
РЕДАКТИРОВАТЬ 2 (в ответ на комментарии): вышеуказанная функция была взята из небольшой программы, которую я недавно написал для изучения Erlang. Я искал функцию форматирования строки и обнаружил, что поведение io_lib:format/2
в erl
нелогично, например:
1> io_lib:format("2 + 2 = ~p", [2+2]).
[50,32,43,32,50,32,61,32,"4"]
В то время я не знал о «автоматическом сплющивании» поведения устройств вывода, упомянутых @archaelus, и поэтому пришел к выводу, что описанное выше поведение было не тем, что я хотел.
Этим вечером я вернулся к этой программе и заменил вызовы функции string_format
выше на io_lib:format
. Единственные проблемы, которые это вызвало, были несколько тестов EUnit, которые потерпели неудачу, потому что они ожидали сплющенную строку. Они были легко исправлены.
Я согласен с @gleber и @womble, что использование этой функции излишне для преобразования целого числа в строку. Если это все, что вам нужно, используйте integer_to_list/1
. ПОЦЕЛУЙ!