ndb*_*dbd 8 printf ocaml pretty-print
printf,fprintf等等:都接受%a转换.
手册说%a:
"用户定义的打印机.使用两个参数并将第一个参数应用于outchan(当前输出通道)和第二个参数.因此,第一个参数必须具有类型out_channel - >'b - > unit和第二个'b.因此,函数产生的输出被插入到当前点的fprintf输出中."
我无法理解用户定义的打印机的用途,以及如何实现和使用它.有人可以解释动机并提供一个例子吗?
例如,当您想要打印复杂的数据结构时,为什么不能直接将自定义函数的数据结构打印到字符串或输出?
"打印复杂的数据结构"是什么意思?一旦定义了将数据结构转换为字符串的函数,就可以执行此操作.也可以使用"默认表示""转储"数据结构(参见http://caml.inria.fr/cgi-bin/hump.en.cgi?sort=0&browse=139)但更多的是调试比什么都重要.
话说回来; 一个非常简单的例子%a:
type ty = A | B
let ty_to_string = function
| A -> "A"
| B -> "B"
let print_ty chan v = output_string chan (ty_to_string v)
let _ = Printf.printf "%a" print_ty A
Run Code Online (Sandbox Code Playgroud)
如果你有一个函数, -> string你可以用它来"%s"打印你的数据,所以我认为在现实情况下你可以“只打印你的数据结构”。它可能是一种风格选择"%a"。在某些方面它确实看起来更加一致。
在 32 位系统上,字符串的长度限制为 16MB 左右。所以你可以想象这样一种情况:如果中间字符串比这个长,那么"%a"while 可以工作却会失败。"%s"不过,我在实践中从未遇到过这种情况。我只是"%s"自己用。
| 归档时间: |
|
| 查看次数: |
2939 次 |
| 最近记录: |