我是OCaml的新手,嘗試調試一些OCaml代碼。 OCaml中是否有任何函數等價於Java中的toString()
函數,通過這些函數可以將大多數對象打印爲輸出?toString()等效於OCaml
9
A
回答
9
在Pervasives模塊中有函數像string_of_int,string_of_float,string_of_bool(你不必打開Pervasives模塊,因爲它是......普遍的)。
或者,您可以使用Printf來執行此類輸出。例如:
let str = "bar" in
let num = 1 in
let flt = 3.14159 in
Printf.printf "The string is: %s, num is: %d, float is: %f" str num flt
另外還有printf的模塊中的sprintf函數,所以如果你想只創建一個字符串,而不是打印到標準輸出,你可以替換最後一行有:
let output = Printf.sprintf "The string is: %s, num is: %d, float is: %f" str num flt
對於您自己定義的更復雜的數據類型,您可以使用Deriving擴展名,這樣您就不需要爲自己的類型定義自己的漂亮打印機功能。
+2
Sexplib庫也可能有用。 – Kakadu
4
如果你使用Core和相關的Sexplib語法擴展,這裏有很好的解決方案。從本質上講,sexplib自動從OCaml類型向s表達式轉換和從s表達式轉換,提供了一種方便的序列化格式。
下面是使用Core和Utop的示例。請務必按照以下說明爲讓自己設置爲使用核心:http://realworldocaml.org/install
utop[12]> type foo = { x: int
; y: string
; z: (int * int) list
}
with sexp;;
type foo = { x : int; y : string; z : (int * int) list; }
val foo_of_sexp : Sexp.t -> foo = <fun>
val sexp_of_foo : foo -> Sexp.t = <fun>
utop[13]> let thing = { x = 3; y = "hello"; z = [1,1; 2,3; 4,2] } ;;
val thing : foo = {x = 3; y = "hello"; z = [(1, 1); (2, 3); (4, 2)]}
utop[14]> sexp_of_foo thing;;
- : Sexp.t = ((x 3) (y hello) (z ((1 1) (2 3) (4 2))))
utop[15]> sexp_of_foo thing |> Sexp.to_string_hum;;
- : string = "((x 3) (y hello) (z ((1 1) (2 3) (4 2))))"
您還可以生成SEXP轉換器的未命名的類型,使用下面的在線報價語法。
utop[18]> (<:sexp_of<int * float list>> (3,[4.;5.;6.]));;
- : Sexp.t = (3 (4 5 6))
更多詳細信息,請訪問:https://realworldocaml.org/v1/en/html/data-serialization-with-s-expressions.html
相關問題
- 1. Swift等效於Java .toString()
- 2. PHP等效於sha1.toString(CryptoJS.enc.Base64)
- 3. OCaml的set_signal等效於F#
- 4. OCaml等效類型
- 5. 將OCaml轉換爲F#:OCaml等效於F#規範,具體爲初始化
- 6. 使用註釋生成等於/ hashcode/toString
- 7. scala specs2。等於支票依託的toString
- 8. 等效於WM_MOVE
- 9. 對於表是否有效使用toString?
- 10. 等效於'@ECHO ON'的Unix等效
- 11. VLOOKUP等效於MySQL
- 12. __LINE__等效於Javascript
- 13. ereg_replace等效於C#
- 14. View.Frame等效於Android
- 15. powershell等效於SIGHUP
- 16. gluProject等效於Javascript
- 17. ifdef等效於TCL
- 18. VBA:GoalSeek等效於C#
- 19. Android等效於JTextArea
- 20. ArrayList.ensureCapacity等效於Javascript
- 21. InitializeComponent等效於xaml
- 22. roxygen2等效於python
- 23. System.setOut()等效於PrintWriter
- 24. respondsToSelector:等效於CoreFoundation?
- 25. char.IsLetterOrDigit等效於php
- 26. PlayOnLinux等效於windows
- 27. DB2等效於[ColumnName]
- 28. PrintDialog.PrinterSettings等效於WPF
- 29. sh等效於__FILE__
- 30. @selector等效於AppleScriptObjC
它一直OCaml中的一個致命英尺。答案可能取決於您使用* Core *還是* Batteries *。 – lukstafi