模块 Stdlib.Printf

module Printf: Printf

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:将整数参数转换为无符号十进制。警告:nlLN 用于 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:将浮点参数转换为十进制表示法,样式为 feE(以更紧凑的方式)。此外,结果的小数部分将删除所有尾随零,如果不再存在小数部分,则删除小数点字符。
  • 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 之前给出的参数值一样多的小数位的 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 的已弃用同义词。