Ho una funzione di tipo in_channel -> out_channel -> unit
che restituirà qualcosa ad un out_channel
. Ora mi piacerebbe ottenere il suo output come una stringa. Creare file temporanei per scrivere e leggerli sembra brutto, quindi come posso farlo? Esistono altri metodi per creare out_channel
oltre alla famiglia Pervasives.open_out
?In OCaml, come posso creare un out_channel che scrive su una stringa/buffer invece di un file sul disco
In realtà, questa funzione ha implementato un repl. Quello di cui ho veramente bisogno è di testarlo a livello di codice, quindi mi piacerebbe prima avvolgerlo in una funzione di tipo string -> string
. Per creare in_channel
, sembra che io possa utilizzare Scanf.Scanning.from_string
, ma non so come creare il parametro out_channel
.
Non penso che ci sia un modo per farlo. Sarebbe complicato, perché le stringhe hanno una lunghezza fissa in OCaml. Non sono davvero adatti come luogo espandibile per memorizzare i personaggi. È possibile utilizzare Printf.sprintf per creare una stringa con gli stessi contenuti che Printf.fprintf avrebbe scritto su un canale di output. Ma a parte questo, potresti dover costruire il tuo meccanismo. –