我是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