2016-06-22 23 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