我不能使用print_endline
,因爲它需要一個字符串,我不認爲我有任何方法將我非常簡單的用戶定義的數據類型轉換爲字符串。我如何檢查這些數據類型的變量的值?有沒有辦法在ocaml中打印用戶定義的數據類型?
11
A
回答
7
8
基本語言中沒有任何內容能爲您做到這一點。有一個名爲OCaml Deriving的項目(以Haskell的功能命名)可以自動從類型聲明中派生打印函數。我沒有用過,但聽起來很棒。
http://code.google.com/p/deriving/
一旦你有你的打印類型(衍生與否)的功能,你可以在OCaml的頂層安裝。這可以很方便,因爲內置的頂級打印有時不能完成你想要的。爲此,請使用Chapter 9 of the OCaml Manual中描述的#install-printer
指令。
3
在OCaml Batteries Included或OCaml Extlib中有第三方庫函數,如dump
,它將使用它可以獲得的所有運行時信息將任何值一般轉換爲字符串。但是這將無法恢復所有信息;例如,構造函數名稱會丟失併成爲整數,所以它看起來不會像你想要的那樣。你基本上必須編寫你自己的轉換函數,或者使用一些工具來爲你編寫它們。
0
除了以前的答案的線條,ppx_sexp是PPX從生成打印機類型定義。下面是如何在使用jbuilder作爲構建系統時使用它,以及使用Base和Stdio作爲stdlib的示例。
首先,jbuild文件指定該怎麼辦編譯:
(jbuild_version 1)
(executables
((names (w))
(libraries (base stdio))
(preprocess (pps (ppx_jane ppx_driver.runner)))
))
而這裏的代碼。
open Base
open Stdio
type t = { a: int; b: float * float }
[@@deriving sexp]
let() =
let x = { a = 3; b = (4.5,5.6) } in
[%sexp (x : t)] |> Sexp.to_string_hum |> print_endline
當你運行它,你會得到這樣的輸出:
((a 3) (b (4.5 5.6)))
S-表達轉換器是目前整個基地和所有相關的庫(標準輸入輸出,CORE_KERNEL,核心,異步,增量等。 ),所以你可以指望能夠序列化你在那裏遇到的任何數據結構,以及你自己定義的任何東西。
相關問題
- 1. 有沒有辦法在MySQL中影響用戶定義的數據類型?
- 2. 有沒有辦法在Python中打印函數的定義
- 3. OCaml中的用戶定義打印機
- 4. 有沒有辦法打印所有類數據
- 5. 有沒有辦法在當前類中打印複合數據類型的所有屬性
- 6. 有沒有辦法將XAML元素定義爲不可打印?
- 7. 有沒有辦法在函數中定義模型字段?
- 8. 有沒有辦法定義在方法聲明中兩個泛型類型
- 9. 有沒有辦法在C++中定義函數體內的返回類型?
- 10. 有沒有辦法打印SEL操作?
- 11. 用戶安裝Ruby gem後,有沒有辦法打印消息?
- 12. 有沒有辦法在ggplot中使用自定義線型
- 13. 有沒有辦法使用SQL數據結構在python中打印列?
- 14. 有沒有辦法在沒有.save()方法的貓鼬中定義模型?
- 15. 用戶定義類型沒有在vb 6.0中定義
- 16. 在Ruby中,有沒有辦法打印出所有定義/預定義的全局變量和常量?
- 17. 有沒有辦法在haskell中解析類型同義詞?
- 18. 有沒有辦法將變量類型綁定到列數據類型?
- 19. 有沒有辦法爲extern類型定義變量
- 20. 有沒有辦法在Netbeans中打印一個變量的值?
- 21. 在GHC中,有沒有辦法打印模塊的輸出?
- 22. 有沒有辦法在Geddy模型中定義虛擬域?
- 23. 有沒有辦法在python中定義用戶定義的類的list(obj)方法?
- 24. 有沒有辦法打印一個特定DIV的內容
- 25. 在打印數組時,有沒有辦法使「=>」對齊?
- 26. 有沒有辦法在matlab中定義一個通用函數?
- 27. 有沒有辦法在R中聲明函數參數類型?
- 28. VBA用戶定義類型沒有定義(有時只)
- 29. 有沒有辦法改變teradata的數據類型?
- 30. Oracle:有沒有辦法獲得視圖的列數據類型?
http://stackoverflow.com/questions/7442449/ocaml-polymorphic-print-and-type-losing – ygrek
http://stackoverflow.com/questions/7380755/ocaml-get-values-type-name – ygrek