模块 Printf

module Printf: sig .. end

格式化输出函数。


val fprintf : out_channel -> ('a, out_channel, unit) format -> 'a

fprintf outchan format arg1 ... argN 根据格式字符串 format 格式化参数 arg1argN,并将结果字符串输出到通道 outchan

格式字符串是一个包含两种对象的字符字符串:普通字符,它们被简单地复制到输出通道;以及转换说明符,每个转换说明符都会导致参数的转换和打印。

转换说明符具有以下形式

% [flags] [width] [.precision] type

简而言之,转换说明符由 % 字符组成,后面跟着可选的修饰符和一个由一个或两个字符组成的类型。

类型及其含义如下

  • d, i:将整数参数转换为带符号的十进制数。标志 # 为大型值添加下划线以提高可读性。
  • u, n, l, L, 或 N:将整数参数转换为无符号十进制数。警告:n, l, LN 用于 scanf,不应用于 printf。标志 # 为大型值添加下划线以提高可读性。
  • x:将整数参数转换为使用小写字母的无符号十六进制数。标志 # 为非零值添加 0x 前缀。
  • X:将整数参数转换为使用大写字母的无符号十六进制数。标志 # 为非零值添加 0X 前缀。
  • o:将整数参数转换为无符号八进制数。标志 # 为非零值添加 0 前缀。
  • s:插入字符串参数。
  • S:将字符串参数转换为 OCaml 语法(双引号,转义)。
  • c:插入字符参数。
  • C:将字符参数转换为 OCaml 语法(单引号,转义)。
  • f:将浮点数参数转换为十进制表示法,样式为 dddd.ddd
  • F:将浮点数参数转换为 OCaml 语法(dddd.dddd.dddd.ddd e+-dd)。使用 # 标志转换为十六进制(参见 h)。
  • eE:将浮点数参数转换为十进制表示法,样式为 d.ddd e+-dd(尾数和指数)。
  • gG:将浮点数参数转换为十进制表示法,样式为 fe, E(以更紧凑的方式)。此外,结果的小数部分中会删除所有尾随零,如果不再存在小数部分,则会删除小数点字符。
  • hH:将浮点数参数转换为十六进制表示法,样式为 0xh.hhhh p+-dd(十六进制尾数,十进制指数,表示 2 的幂)。
  • B:将布尔参数转换为字符串 truefalse
  • b:转换布尔参数(已弃用;在新程序中不要使用)。
  • ld, li, lu, lx, lX, lo:将 int32 参数转换为第二个字母指定的格式(十进制、十六进制等)。
  • nd, ni, nu, nx, nX, no:将 nativeint 参数转换为第二个字母指定的格式。
  • Ld, Li, Lu, Lx, LX, Lo:将 int64 参数转换为第二个字母指定的格式。
  • a:用户定义的打印机。获取两个参数并将第一个参数应用于 outchan(当前输出通道)和第二个参数。因此,第一个参数必须具有类型 out_channel -> '-> unit,第二个参数必须具有类型 'b。该函数产生的输出将插入到当前位置的 fprintf 输出中。
  • t:与 %a 相同,但仅获取一个参数(类型为 out_channel -> unit)并将其应用于 outchan
  • { fmt %}:将格式字符串参数转换为其类型摘要。该参数必须与内部格式字符串 fmt 具有相同的类型。
  • ( fmt %):格式字符串替换。获取一个格式字符串参数并将其替换为内部格式字符串 fmt 以打印后续参数。该参数必须与内部格式字符串 fmt 具有相同的类型。
  • !:不获取参数并刷新输出。
  • %:不获取参数并输出一个 % 字符。
  • @:不获取参数并输出一个 @ 字符。
  • ,:不获取参数并且不输出任何内容:转换说明符的无操作分隔符。

可选的 flags

  • -:左对齐输出(默认是右对齐)。
  • 0:对于数值转换,使用零而不是空格进行填充。
  • +:对于带符号的数值转换,如果为正,则在数字前添加 + 符号。
  • 空格:对于带符号的数值转换,如果为正,则在数字前添加空格。
  • #:请求整数类型和浮点数类型 F 的备用格式样式。

可选的 width 是一个整数,表示结果的最小宽度。例如,%6d 打印一个整数,并在其前面添加空格以填充至少 6 个字符。

可选的 precision 是一个点 .,后面跟着一个整数,表示 %f%e%E%h%H 转换中跟随小数点的位数,或者 %F%g%G 转换中显示的最多有效数字数。例如,%.4f 打印一个具有 4 位小数的 float

widthprecision 中的整数也可以指定为 *,在这种情况下,会获取一个额外的整数参数来指定相应的 widthprecision。此整数参数紧接在要打印的参数之前。例如,%.*f 打印一个 float,其小数位数与在该浮点数之前给出的参数的值相同。

val printf : ('a, out_channel, unit) format -> 'a

Printf.fprintf 相同,但输出到 stdout

val eprintf : ('a, out_channel, unit) format -> 'a

Printf.fprintf 相同,但输出到 stderr

val sprintf : ('a, unit, string) format -> 'a

Printf.fprintf 相同,但不是打印到输出通道,而是返回一个包含格式化参数结果的字符串。

val bprintf : Buffer.t -> ('a, Buffer.t, unit) format -> 'a

Printf.fprintf 相同,但不是打印到输出通道,而是将格式化参数追加到给定的可扩展缓冲区(参见模块 Buffer)。

val ifprintf : 'b -> ('a, 'b, 'c, unit) format4 -> 'a

Printf.fprintf 相同,但不打印任何内容。在有条件打印时忽略某些内容很有用。

val ibprintf : Buffer.t -> ('a, Buffer.t, unit) format -> 'a

Printf.bprintf 相同,但不打印任何内容。在有条件打印时忽略某些内容很有用。

带延续的格式化输出函数。

val kfprintf : (out_channel -> 'd) ->
out_channel -> ('a, out_channel, unit, 'd) format4 -> 'a

fprintf 相同,但不是立即返回,而是在打印结束时将其第一个参数传递给输出通道。

val ikfprintf : ('b -> 'd) -> 'b -> ('a, 'b, 'c, 'd) format4 -> 'a

与上面的 kfprintf 相同,但不打印任何内容。在有条件打印时忽略某些内容很有用。

val ksprintf : (string -> 'd) -> ('a, unit, string, 'd) format4 -> 'a

与上面的 sprintf 相同,但不是返回字符串,而是将其传递给第一个参数。

val kbprintf : (Buffer.t -> 'd) ->
Buffer.t -> ('a, Buffer.t, unit, 'd) format4 -> 'a

bprintf 相同,但不是立即返回,而是在打印结束时将其第一个参数传递给缓冲区。

val ikbprintf : (Buffer.t -> 'd) ->
Buffer.t -> ('a, Buffer.t, unit, 'd) format4 -> 'a

与上面的 kbprintf 相同,但不打印任何内容。在有条件打印时忽略某些内容很有用。

已弃用

val kprintf : (string -> 'b) -> ('a, unit, string, 'b) format4 -> 'a
已弃用。 请改用 Printf.ksprintf。

ksprintf 的已弃用同义词。