Я знаю, что строки Erlang следует избегать любой ценой...
но если я этого не делаю, как мне создать "5" из 5?
в частности, есть ли что-то вроде io: format ( "~ p", [5]), которое вернет форматированную строку вместо печати в поток?
Я знаю, что строки Erlang следует избегать любой ценой...
но если я этого не делаю, как мне создать "5" из 5?
в частности, есть ли что-то вроде io: format ( "~ p", [5]), которое вернет форматированную строку вместо печати в поток?
Возможно, это не самый простой способ, но он работает:
1> lists:flatten(io_lib:format("~p", [35365])).
"35365"
EDIT: я обнаружил, что полезная функция:
%% 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)).
EDIT 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
. ПОЦЕЛУЙ!
Там также integer_to_list/1
, который делает именно то, что вы хотите, без уродства.
Строка представляет собой список:
9> integer_to_list(123).
"123"
В стороне, если вам когда-либо понадобится строковое представление поплавков, вы должны посмотреть на work, который сделал Боб Ипполито mochinum.
списки: CONCAT ([Number]). также работает.