4

io:format/1 の出力結果を取得しようとしています。

io_lib、io_lib:format/2 に同様の関数があることは知っていますが、出力が異なります。実際、それはまったく何もしません。io:format をバインドしようとすると、ok がバインドされ、書式設定された文字列がコンソールに書き出されます。

私の質問は、io_lib:format/2 で同じ出力を得るにはどうすればよいですか? または、フォーマットされた文字列を変数にバインドするにはどうすればよいですか?

1> A = io:get_line('> ').
> "test".
"\"test\".\n"
2> io:format(A).
"test".
ok
3> B = io_lib:format(A, []).
"\"test\".\n"
4> B.
"\"test\".\n"
5> C = io:format(A).
"test".
ok
6> C.
ok
4

1 に答える 1

7

io_lib:format方法は出力関数ではありませんio:format。代わりio_lib:formatに値を返すだけで、出力しません。

その結果がio:format「テスト」として表示されます。端末に送信されたレンダリングされたバージョン (改行を含む) である場合、 が返されますokio_lib:format逆に、あなたが見るその戻り値は"\"test\".\n"、引用符と改行がエスケープされ、独自の引用符で囲まれた、同じ文字列の erlang シェルの表現です。

io_lib:format文字列に値を挿入するために、より一般的に使用されます (C のprintf関数に似ています)。たとえば、次のようなことをします

NewString = io_lib:format("The string entered was ~s I hope you like it",[A])

の値NewString

The string entered was "test".
I hope you like it

Erlang シェルの表現は次のようになります。

"The string entered was \"test\".\n I hope you like it"

入力した値を出力するだけio:formatで十分な場合は、それで十分です。

于 2012-10-29T20:50:56.457 に答える