61

Erlang の文字列を使用するとコストがかかることはわかっています。では、どうすれば に変換"5"でき5ますか?

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

4

5 に答える 5

157

integer_to_list/1醜いことなく、まさにあなたが望むことをするもあります。

于 2009-02-25T22:40:15.080 に答える
30

文字列はリストです:

9> integer_to_list(123).  
"123"
于 2009-10-29T19:24:56.577 に答える
16

以下はおそらく最もきちんとした方法ではありませんが、機能します。

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)).

編集 2 (コメントへの返信): 上記の関数は、Erlang を学ぶために少し前に書いた小さなプログラムからのものです。文字列フォーマット関数を探していたところ、直観に反する動作が見つかりましたio_lib:format/2erlたとえば、次のようになります。

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。接吻!

于 2009-02-25T21:48:24.347 に答える
4

余談ですが、float の文字列表現を扱う必要がある場合は、Bob Ippolito がmochinumで行った作業を参照する必要があります。

于 2009-02-26T09:46:49.533 に答える
2

リスト:concat([数値])。も機能します。

于 2011-03-09T04:52:08.600 に答える