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?
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!
Il y a aussi integer_to_list/1
, qui fait exactement ce que vous voulez, sans la laideur.
Une chaîne est une liste:
9> integer_to_list(123).
"123"
listes: concat ([Number]). fonctionne également.