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

Printing Printf.fprintf格式:在文本右侧添加空格,printing,ocaml,Printing,Ocaml,我有一个正常的功能打印: (* 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中控制长度,我想在

我有一个正常的功能
打印

(* 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“在这里:%15a\n”Abc.print x
似乎不起作用。我还想在文本的右侧添加空格,而不是在左侧


有人知道怎么做吗?

快速答案是使用
*
作为字段宽度,并提供一个负整数

$ 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 = ()
#让我们把字符串s=s;#;;
val to_字符串:“a->”a=
#让打印宽度chan x=Printf.fprintf chan“%*s”宽度(到字符串x);;
val打印:整数->输出通道->字符串->单位=
#Printf.fprintf stdout“在这里:[%a]\n”(print(-15))“string”;;
这是:[字符串]
-:单位=()

我希望这能有所帮助。

对不起,我想用
%a
,而不是
%s
,似乎
Printf.fprintf标准输出“[%*a]\n”(-15)Abs.print x
不起作用……试试
Printf.fprintf标准输出”[%a](Abs.print(-15))x
。我会更新我的答案。谢谢你的回答,但是我所有模块的
打印
都有相同的签名
:out\u channel->t->unit
,我真的不想更改它。。。让我们看看是否会有其他评论…在我看来,你想要一些“管道”是不可用的。
%a
格式将所有打印留给打印功能,只传递要打印的值。没有地方可以通过宽度。