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 shell 对同一字符串的表示,引号和换行符被转义,并被自己的引号包围。

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 Shell 的表示将是:

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

如果您只想输出刚刚输入的值,则io:format足以满足您的需求。

于 2012-10-29T20:50:56.457 回答