2016-06-22 24 views
1

我想了解和使用Format.fprintf模块中的一段代码。 我有这样如何使用Format.fprintf函数返回漂亮的打印字符串?

let some_function fmt s = match s with 
    | For(exp,_) -> Format.fprintf fmt "something here" 
    | Assume x-> Format.fprintf fmt "something here as well" 

我想修改该函数返回一个字符串的函数。由于我在原代码中使用了一些漂亮的打印机,Printf.sprintf不是一个选项。请帮忙。

+1

['Format.sprintf'](http://caml.inria.fr/pub/docs/manual-ocaml/libref/Format.html#VALsprintf) ? – pdexter

回答

3

使用Format.asprintf

let string_of_s = Format.asprintf "%a" some_function s 

我不推荐使用Format.sprintf,因为它有一个有限的类型。例如,下面的不键入检查:

let string_of_s_ill_typed = Format.sprintf "%a" some_function s 
+0

根据Format.fprintf文件可以打印到一个字符串。我们可以使用此功能从上述函数返回一个字符串吗? 我的意思是使用'fprintf'写入一个字符串并返回相同的结果 – user3586612

+0

您可以使用'str_formatter',一个特殊的格式化程序将'fprintf'的输出重定向到一个缓冲区而不是普通的通道。它有一些缺点:你需要调用'flush_str_formatter'来获取字符串结果,'str_formatter'是一个全局状态,因此与'asprintf'相比,容易出错。 – camlspotter