63 votes

convertir un entier en chaîne dans Erlang

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

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

en particulier, y a-t-il quelque chose comme io: format ("~ p", [5]) qui renverrait une chaîne formatée au lieu d'être imprimée dans un flux?

157voto

womble Points 6477

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

32voto

Thomas Points 1464

Une chaîne est une liste:

 9> integer_to_list(123).  
"123"
 

16voto

Luke Woodward Points 20417

Ce qui suit est probablement pas la plus élégante, mais elle 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 venu à partir d'un petit programme que j'ai écrit un temps d'apprendre Erlang. J'étais à la recherche d'une chaîne de mise en forme de la fonction et a trouvé le comportement de l' 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, j'étais pas au courant de l '" auto-aplatissement par le comportement des périphériques de sortie mentionné par @archaelus et ils en ont conclu que le comportement n'était pas ce que je voulais.

Ce soir, je suis retourné à ce programme et l'a remplacé les appels à l' string_format fonction ci-dessus avec io_lib:format. Les seuls problèmes que cela a causé quelques EUnit les tests qui ont échoué parce qu'ils étaient attendent à une stagnation de la chaîne. Elles ont été facilement résolu.

Je suis d'accord avec @gleber et @traces womble que l'utilisation de cette fonction est overkill pour la conversion d'un entier en chaîne de caractères. Si c'est tout ce dont vous avez besoin, integer_to_list/1. KISS!

4voto

Gordon Guthrie Points 4108

En passant, si vous devez vous occuper de la représentation sous forme de chaîne des floats, vous devriez regarder le travail que Bob Ippolito a fait sur mochinum .

2voto

Michael Neale Points 7704

listes: concat ([Number]). fonctionne aussi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X