我有一个正常的函数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
似乎无法奏效。另外,我想在文本右侧添加空格,而不是左侧。
有谁知道怎么做?
答案 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 = ()
我希望这会有所帮助。