Sono nuovo in OCaml e sto provando a eseguire il debug di un codice OCaml. Esiste qualche funzione in OCaml equivalente alla funzione toString()
in Java con la quale è possibile stampare la maggior parte degli oggetti come output?toString() equivalente in OCaml
risposta
Ci sono funzioni come string_of_int, string_of_float, string_of_bool nel modulo Pervasives (non è necessario aprire il modulo Pervasives perché è ... pervasivo).
In alternativa, è possibile utilizzare Printf per eseguire questo tipo di output. Per esempio:
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
C'è anche una funzione sprintf nel modulo Printf, quindi se si voleva creare solo una stringa invece di stampare su stdout si potrebbe sostituire quella ultima linea con:
let output = Printf.sprintf "The string is: %s, num is: %d, float is: %f" str num flt
Per tipi di dati più complessi della propria definizione, è possibile utilizzare l'estensione Deriving in modo che non sia necessario definire le proprie funzioni di stampante per il proprio tipo.
Anche la libreria di Sexplib può essere utile. – Kakadu
Se si utilizza Core e l'estensione della sintassi Sexplib associata, esistono soluzioni piuttosto buone. Essenzialmente, sexplib genera automaticamente convertitori da tipi OCaml a e da espressioni S, fornendo un comodo formato di serializzazione.
Ecco un esempio utilizzando Core e Utop. Assicurati di seguire le seguenti istruzioni per farti impostato per utilizzare Nucleo: 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))))"
Si può anche generare sexp convertitori per i tipi senza nome, utilizzando la seguente sintassi citazione in linea.
utop[18]> (<:sexp_of<int * float list>> (3,[4.;5.;6.]));;
- : Sexp.t = (3 (4 5 6))
Maggiori dettagli sono disponibili qui: https://realworldocaml.org/v1/en/html/data-serialization-with-s-expressions.html
- 1. equivalente Swift di Java .toString()
- 2. javascript equivalente di join() e toString() in C#?
- 3. ToString ("0") versus ToString (CultureInfo.InvariantCulture)
- 4. Ordinamento topologico in OCaml
- 5. BitArray veloce in OCaml
- 6. Equality in Ocaml hashtables
- 7. Tipi ricorsivi in OCaml?
- 8. Sovraccarico in Ocaml
- 9. Hashtables in ocaml
- 10. programmazione modulare in ocaml
- 11. Durata in Ocaml
- 12. tipi parametrizzati in OCaml
- 13. Espressioni regolari in OCaml
- 14. Building AST in OCaml
- 15. Polymorphism debole in OCaml
- 16. OCaml: tipo controllo degli oggetti
- 17. ToString Nullable()
- 18. Implementazione Force toString() in sottoclassi
- 19. valueOf() vs. toString() in Javascript
- 20. SQL IN equivalente in CAML
- 21. Implementazione Ocaml
- 22. Qual è la differenza tra ToString ("D2") .ToString ("00")
- 23. Tabelle di ricerca in OCaml
- 24. Modulo e classe in OCaml
- 25. Come installare corebuild in ocaml
- 26. "come" parola chiave in OCaml
- 27. Controllo della sottostringa in Ocaml
- 28. modulo usando includono in OCaml
- 29. Tracciamento e debug in OCaml
- 30. Copia di campi in OCaml
E 'stato un Achille-piede di OCaml. La risposta dipenderà probabilmente dall'utilizzo di * Core * o * Batterie *. – lukstafi