io:format() vs io_lib:format()

Raimo Niskanen raimo.niskanen@REDACTED
Wed Feb 26 16:22:18 CET 2003

io:format(Format, Args) uses io_lib:format(Format, Args) to create the 
data that is written to stdout, so there should be absolutely no 
difference in the result. Apart from that io_lib:format/2 returns a deep 
string, and io:format/2 just does a side effect.

io:put_chars(io_lib:format(Format, Args)) would be exactly equivalent to 
io:format(Format, Args).

The feature in io_lib:format/2's return value is that the string need 
not be flattened if it is supposed to be sent to e.g io:put_chars/1, 
file:write/2 or erlang:port_command/2. It is a perfectly valid IO-list 
and it is wasting time to flatten it if it is not needed.

/ Raimo Niskanen, Erlang/OTP, Ericsson AB

Bengt Kleberg wrote:
> greetings,
> are the differences between io:format() and io_lib:format() documented
> anywhere? or is there no difference?
> 3> io:format( "asd~s~n", ["asd"]).
> asdasd
> ok
> 4> io_lib:format( "asd~s~n", ["asd"]).
> [97,115,100,"asd","\n"]
> io:format() gives me a single string.
> io_lib:format() gives me a string with a string as element 3 (0 based).
> is this a bug or a feature? or is it a result of flattening the string
> as it goes to stdout?
> bengt

More information about the erlang-questions mailing list