string - convertir un entero en una cadena en Erlang
!= erlang (5)
Como punto de partida, si alguna vez necesita lidiar con la representación en cadena de flotadores, debería ver el work que Bob Ippolito ha hecho en mochinum .
Lo sé, las cuerdas de Erlang deben evitarse a toda costa ...
pero si no estoy haciendo eso, ¿cómo produzco "5" de 5?
en particular, ¿hay algo como io: format ("~ p", [5]) que devolvería una cadena formateada en lugar de imprimirla en un flujo?
Probablemente la siguiente no sea la mejor manera, pero funciona:
1> lists:flatten(io_lib:format("~p", [35365])).
"35365"
EDITAR: He encontrado que la siguiente función es útil:
%% 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 (en respuesta a los comentarios): la función anterior provino de un pequeño programa que escribí hace un tiempo para aprender Erlang. Estaba buscando una función de formato de cadena y encontré el comportamiento de io_lib:format/2
en erl
contra-intuitivo, por ejemplo:
1> io_lib:format("2 + 2 = ~p", [2+2]).
[50,32,43,32,50,32,61,32,"4"]
En ese momento, no era consciente del comportamiento de "auto-aplanamiento" de los dispositivos de salida mencionados por @archaelus y, por lo tanto, llegué a la conclusión de que el comportamiento anterior no era lo que quería.
Esta noche, volví a este programa y reemplacé las llamadas a la función string_format
anterior con el io_lib:format
. Los únicos problemas que esto causó fueron algunas pruebas de EUnit que fallaron porque esperaban una cuerda aplanada. Estos fueron fácilmente arreglados.
Estoy de acuerdo con @gleber y @womble en que usar esta función es excesivo para convertir un entero en una cadena. Si eso es todo lo que necesita, use integer_to_list/1
. ¡BESO!
También hay integer_to_list/1
, que hace exactamente lo que quieres, sin la fealdad.
Una cadena es una lista:
9> integer_to_list(123).
"123"
listas: concat ([número]). tambien funciona