1

我有一个正常的功能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似乎不起作用。另外我想在文本的右侧添加空格,而不是左侧。

有谁知道该怎么做?

4

1 回答 1

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 = ()

我希望这有帮助。

于 2013-09-09T20:42:08.543 回答