web-dev-qa-db-ja.com

Erlangで整数を文字列に変換します

私は知っています、Erlangの文字列はどんな犠牲を払っても避けるべきです...

しかし、私がそれをしていない場合、どのように5から「5」を生成しますか?

特に、io:format( "〜p"、[5])など、ストリームに出力する代わりにフォーマットされた文字列を返すものはありますか?

56
collapsinghrung

以下はおそらく最も近い方法ではありませんが、機能します:

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

編集:私は次の機能が役立つことがわかりました:

%% 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を学ぶためにしばらく前に書いた小さなプログラムから来ました。文字列フォーマット関数を探していましたが、erl直感に反するio_lib:format/2の動作がわかりました。たとえば、

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を使用します。接吻!

14
Luke Woodward

また、integer_to_list/1もあります。

145
womble

文字列はリストです:

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

余談ですが、フロートの文字列表現を扱う必要がある場合は、Bob Ippolitoが mochinum で行った work を確認する必要があります。

4
Gordon Guthrie

list:concat([Number])。動作します。

2
Michael Neale