格式字符串中的公共控制序列

虽然 io:formatio_lib:format 有许多不同的控制序列 ,但大多数时候你只使用三种不同的控制序列~s~p~w

382 4

~s 用于琴弦

它打印字符串,二进制文件和原子。 (任何其他东西都会导致 badarg 错误。)它没有引用或转义任何东西; 它只是打印字符串本身:

%% Printing a string:
> io:format("~s\n", ["hello world"]).
hello world

%% Printing a binary:
> io:format("~s\n", [<<"hello world">>]).
hello world

%% Printing an atom:
> io:format("~s\n", ['hello world']).
hello world

〜w ^

~w 用于使用标准语法编写

它可以打印任何 Erlang 术语。可以解析输出以返回原始的 Erlang 术语,除非它包含没有可解析的书面表示的术语,即 pids,端口和引用。它不会插入任何换行符或缩进,并且字符串始终被解释为列表:

> io:format("~w\n", ["abc"]).
[97,98,99]

〜p

~p 用于漂亮打印

它可以打印任何 Erlang 术语。输出与~w 的不同之处如下:

  • 如果该行太长,则插入换行符。
  • 插入换行符时,下一行将缩进以与同一级别上的前一个术语对齐。
  • 如果整数列表看起来像可打印字符串,则将其解释为一个。
> io:format("~p\n", [{this,is,a,tuple,with,many,elements,'and',a,list,'of',numbers,[97,98,99],that,'end',up,making,the,line,too,long}]).
{this,is,a,tuple,with,many,elements,'and',a,list,'of',numbers,"abc",that,
      'end',up,making,the,line,too,long}

如果你不希望将整数列表打印为字符串,则可以使用~lp 序列(在 p 之前插入小写字母 L):

> io:format("~lp\n", [[97,98,99]]).
[97,98,99]

> io:format("~lp\n", ["abc"]).
[97,98,99]