Nella versione precedente di libreria di base della funzione to_sec_string
ha avuto la seguente interfaccia:
(** [to_sec_string t] Same as to_string, but without milliseconds *)
val to_sec_string : t -> string
Ad un certo punto del tempo hanno cambiato la sua interfaccia e ora è
(** Same as [to_string_abs], but without milliseconds *)
val to_sec_string : t -> zone:Zone.t -> string
Ciò significa, che ora questa è una funzione con due parametri. Il primo è ancora un valore di tipo Time.t
, ma il secondo è un argomento labeled di tipo Zone.t
che specifica un fuso orario. Un parametro con etichetta, a differenza di un normale parametro posizionale, può essere passato a una funzione in posizione arbitraria, in modo che non sia necessario ricordare l'ordine degli argomenti. Un solita invocazione sarà simile a questa:
let s = Time.to_sec_string time ~zone:Time.Zone.local
dove Time.Zone.local
è un oggetto di fuso orario, che rappresenta il fuso orario locale. Poiché si tratta di un parametro etichettato, si può anche chiamare la funzione come questa:
let s = Time.to_sec_string ~zone:Time.Zone.local time
Inoltre, dal momento che entrambi i parametri qui hanno tipi differenti, OCaml può anche indovinare chi è che senza usare l'etichetta, in modo da poter fallback a argomenti posizionali:
let s = Time.to_sec_string time Time.Zone.local
Infine, la maggior parte dei tipi di nucleo ha in là funzione di interfaccia to_string
. Quindi una soluzione più semplice sarebbe quella di usarlo, invece di to_sec_string
. Ha un formato leggermente diverso e più dettagliato, però:
Time.to_string time^" -- "^message
Come ho capito, il problema è che Tmie.to_sec_string tempo restituisce la funzione non una stringa. –
Sembra che la funzione sia aggiornata e ora ha un argomento extra di 'zone: Core.Zone.t'. Devi applicare alcuni dati del fuso orario 'z' come' TIme.to_sec_string ~ zone: z time' – camlspotter