web-dev-qa-db-fra.com

convertir un entier en chaîne dans Erlang

Je sais, les cordes Erlang doivent être évitées à tout prix ...

mais si je ne fais pas ça, comment puis-je produire "5" à partir de 5?

en particulier, existe-t-il quelque chose comme io: format ("~ p", [5]) qui retournerait une chaîne formatée au lieu d'imprimer dans un flux?

56
collapsinghrung

Ce qui suit n'est probablement pas la manière la plus ordonnée, mais cela fonctionne:

1> lists:flatten(io_lib:format("~p", [35365])).
"35365"

EDIT: J'ai trouvé que la fonction suivante est utile:

%% 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 réponse aux commentaires): la fonction ci-dessus est venue d'un petit programme que j'ai écrit il y a quelque temps pour apprendre Erlang. Je cherchais une fonction de formatage de chaîne et j'ai trouvé le comportement de io_lib:format/2 dans erl contre-intuitif, par exemple:

1> io_lib:format("2 + 2 = ~p", [2+2]).
[50,32,43,32,50,32,61,32,"4"]

À l'époque, je n'étais pas au courant du comportement "d'aplatissement automatique" des périphériques de sortie mentionné par @archaelus et j'ai donc conclu que le comportement ci-dessus n'était pas ce que je voulais.

Ce soir, je suis retourné à ce programme et j'ai remplacé les appels au string_format fonction ci-dessus avec io_lib:format. Les seuls problèmes que cela a causés ont été quelques tests EUnit qui ont échoué car ils s'attendaient à une chaîne aplatie. Celles-ci ont été facilement réparées.

Je suis d'accord avec @gleber et @womble que l'utilisation de cette fonction est exagérée pour convertir un entier en chaîne. Si c'est tout ce dont vous avez besoin, utilisez integer_to_list/1. BAISER!

14
Luke Woodward

Il y a aussi integer_to_list/1, qui fait exactement ce que vous voulez, sans la laideur.

145
womble

Une chaîne est une liste:

9> integer_to_list(123).  
"123"
28
Thomas

En passant, si jamais vous avez besoin de traiter la représentation sous forme de chaîne des flottants, vous devriez regarder le travail que Bob Ippolito a fait sur mochinum .

4
Gordon Guthrie

listes: concat ([Number]). fonctionne également.

2
Michael Neale