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
格式将所有打印留给打印功能,只传递要打印的值。没有地方可以通过宽度。