Printf.fprintf格式:在文本右侧添加空格

时间:2013-09-09 20:17:02

标签: printing ocaml

我有一个正常的函数print

(* abc.ml *)
let print (chan: out_channel) (x: t) : unit =
  Printf.fprintf chan "%s" (to_string x)

然后我会多次调用此函数,例如:

Printf.fprintf stdout "Here it is: %a\n" Abc.print x

我知道"%15s" print的参数允许在文本前面添加空格,以便整个长度为15。但是,我不想控制Abs.print中的长度,我想通过%a调用它来控制它。但Printf.fprintf stdout "Here it is: %15a\n" Abc.print x似乎无法奏效。另外,我想在文本右侧添加空格,而不是左侧。

有谁知道怎么做?

1 个答案:

答案 0 :(得分:2)

快速回答是使用*作为字段宽度并提供负整数。

$ ocaml
        OCaml version 4.00.1

# Printf.printf "[%*s]\n" (-15) "string";;
[string         ]
- : unit = ()

<强>更新

在更复杂的场景中,您应该可以执行以下操作:

# let to_string s = s;;
val to_string : 'a -> 'a = <fun>

# let print width chan x = Printf.fprintf chan "%*s" width (to_string x);;
val print : int -> out_channel -> string -> unit = <fun>

# Printf.fprintf stdout "Here it is: [%a]\n" (print (-15)) "string";;
Here it is: [string         ]
- : unit = ()

我希望这会有所帮助。