2014-04-25 53 views
1

Ocaml解釋器能夠顯示(打印)任何類型的值。例如,如果一個函數返回一個數組,它可以打印一個數組。此外,即使使用自定義類型,也可以工作例如,如果我這樣做:使用解釋器的打印功能?

type dummy = DUMMY int * string ;;讓x = DUMMY(1,「s」);;

然後x ;; 打印在這個屏幕上:

- :空= DUMMY(1, 「S」)

我的問題是,我怎麼能訪問此功能?例如,如果我正在調試一些代碼並想打印一些非標準對象(即,除int,字符串等之外的東西),那麼如何使用解釋器使用的函數來做到這一點,而無需創建單獨的打印功能的一切?

+1

總之,你不能。和[caml-list](http://caml.inria.fr/pub/ml-archives/caml-list/)(另見[here](https://sympa.inria.fr/sympa/arc/) caml-list)...)是一個更好的地方去問(幾年前這個問題已經被問過幾次了)。 –

+0

@BasileStarynkevitch:爲什麼不是適合這個問題的計算器? – bienvenu

+0

(我以前的評論是一個誠實的問題,我不是想說你錯了) – bienvenu

回答

3

OCaml是一種有類型的語言,但它在獨立程序運行時拋出類型信息,如構造函數名稱。因此你不能擁有需要這種類型信息的普通值打印機。

OCaml toplevel或REPL,您稱爲解釋器,是一個例外:它將類型保存在內存中。

現在,如果您希望打印值更容易一些,可以使用CamlP4擴展名(如「deriving」)自動生成它們。但它不提供一個通用打印機,而是爲每種類型自動提供打印機。您仍然需要編寫它們,如print_list print_dummy,以便打印dummy list的值。