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!

È stato utile?

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 -> () ;;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top