OCaml için yeni ve bazı OCaml kodlarında hata ayıklamaya çalışıyorum. OCaml'de, nesnelerin çoğunun çıktı olarak yazdırılabildiği Java'da toString()
işlevine eşdeğer bir işlev var mı?toString() eşdeğeri OCaml
cevap
Pervasives modülünde string_of_int, string_of_float, string_of_bool gibi işlevler vardır (Pervasives modülünü açmak zorunda değilsiniz, çünkü ... yaygındır).
Alternatif olarak, bu tür bir çıktı yapmak için Printf'i kullanabilirsiniz. Örneğin:
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
Orada Printf modülünde bir sprintf işlevi de, bu yüzden sadece stdout'a yerine baskı bir dizi yaratmak istedik eğer o son satırı yerine olabilir:
let output = Printf.sprintf "The string is: %s, num is: %d, float is: %f" str num flt
için Kendi tanımlamanız için daha karmaşık veri türleri, Deriving uzantısını kullanabilirsiniz, böylece türünüz için kendi güzel yazıcı işlevlerinizi tanımlamanız gerekmez.
Sexplib kitaplığı da yararlı olabilir. – Kakadu
Core ve ilişkili Sexplib sözdizimi uzantısını kullanırsanız, bunun için oldukça iyi çözümler vardır. Esas olarak, sexplib, OCaml tiplerinden s-ifadelerine ve uygun bir serileştirme formatı sağlayan dönüştürücüleri otomatik olarak üretir.
Core ve Utop kullanarak bir örnek. Emin kendinizi Core'u kullanmak üzere ayarlanmış almak için aşağıdaki yönergeleri izleyin olun: 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))))"
Ayrıca aşağıdaki satır içi tırnak sözdizimi kullanılarak, un adlandırılmış türleri için sexp-dönüştürücüleri oluşturabilir.
utop[18]> (<:sexp_of<int * float list>> (3,[4.;5.;6.]));;
- : Sexp.t = (3 (4 5 6))
Daha detay için mevcuttur: https://realworldocaml.org/v1/en/html/data-serialization-with-s-expressions.html
- 1. javascript C# içinde join() ve toString() eşdeğeri?
- 2. ToString
- 3. toString
- 4. toString()
- 5. OCaml ile HTML Ayrıştırma
- 6. OCaml
- 7. OCaml
- 8. Ocaml
- 9. OCaml
- 10. OCaml
- 11. OCaml
- 12. Ocaml
- 13. OCaml
- 14. OCaml
- 15. uygulanması toString
- 16. kullanma modülü OCaml 3.11 yılında OCaml
- 17. OCaml toplevel
- 18. Ocaml Opsiyonu
- 19. OCaml bildirimi
- 20. Ocaml hashkolleri
- 21. `operatöründe OCaml
- 22. İşlev Proxy .toString() Hatalar
- 23. valueOf() vs. toString() Javascript'te
- 24. C# toString() performans
- 25. Java sınıflarının toString()
- 26. Int32.ToString() Çok yavaş
- 27. Enum ToString bir sayı
- 28. Java: enum toString()
- 29. Parantezsiz Java toString ArrayList
- 30. Neden 2..toString() çalışıyor?
Bu OCaml bir Aşil-ayak olmuştur. Cevap muhtemelen * Core * veya * Piller * kullanıp kullanmadığınıza bağlı olacaktır. – lukstafi