gestione delle eccezioni ocaml per il canale di ingresso apertura
-
25-09-2019 - |
Domanda
Come un principiante in OCaml, ho questo codice di lavoro corrente:
...
let ch_in = open_in input_file in
try
proc_lines ch_in
with End_of_file -> close_in ch_in;;
Ora vorrei aggiungere la gestione degli errori per i file di input non-esistenti, ho scritto questo:
let ch_in = try Some (open_in input_file) with _ -> None in
match ch_in with
| Some x -> try proc_lines x with End_of_file -> close_in x
| None -> () ;;
e un messaggio di errore: Questo modello corrisponde valori di tipo 'un'opzione ma viene qui utilizzato per corrispondere valori di tipo Exn per l'ultima riga. Se io sostituto Nessuno per _ , si ottiene un errore sulla corrispondenza incompleta.
Ho letto che Exn è il tipo di eccezione. Sono sicuro che non capisco cosa sta realmente succedendo qui, quindi per favore mi punto nella giusta direzione. Grazie!
Soluzione
Quando l'incorporamento corrispondenze di pattern all'interno di altre partite del modello è necessario racchiudere la partita incorporato sia con ( ... )
o begin ... end
(zucchero sintattico per parentesi):
let ch_in = try Some (open_in input_file) with _ -> None in
match ch_in with
| Some x -> (try proc_lines x with End_of_file -> close_in x)
| None -> () ;;