OCaml 等同于 f# "%A"

OCaml equivalent to f# "%A"

在 F# 中,以下是简单的:

let l = [1;2;3;4]
let s = sprintf "%A" l

其中“%A”打印几乎任何常见甚至递归数据结构的格式化版本。

在 ocaml 中有类似简单的东西吗?

有些东西很接近,%a 说明符接受两个参数,第一个是 'a 类型的漂亮打印机,第二个是 'a 类型的值。打印机的类型取决于使用的 printf 函数的类型。例如,

open Core_kernel.Std
open Format

printf "%a" Int63.pp Int63.one

当然,这很大程度上取决于图书馆的良好支持。如果没有为类型提供的 pp 函数,那么它就毫无用处。

还有一个 custom_printf 语法扩展可用于 pp 和 ppx。在此扩展中,您将模块名称放在规范符的位置。该模块必须具有 to_string 功能。 ppx版本,格式字符串前需要感叹号:

printf !"%{Int63}" Int63.one

还有一个转储功能,可在 Internet 上使用。特别是您可以在 Batteries 库中找到它。它递归数据表示并以或多或少的人类可读表示形式打印它。但这与格式化输出无关。