Question

En tant que débutant en Ocaml, j'ai ce code de travail actuel:

...
let ch_in = open_in input_file in
try
    proc_lines ch_in
with End_of_file -> close_in ch_in;;

Maintenant, je voudrais ajouter la gestion des erreurs pour les fichiers d'entrée non-existante, je l'ai écrit ceci:

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 -> () ;;

et un message d'erreur: Ce modèle correspond à des valeurs de type « une option mais il est ici utilisé pour correspondre aux valeurs de type exn pour la dernière ligne. Si je remplace Aucun pour _ , je reçois une erreur sur la correspondance incomplète.

Je lis que exn est le type d'exception. Je suis sûr que je ne comprends pas ce qui se passe vraiment ici, alors s'il vous plaît me indiquer la bonne direction. Merci!

Était-ce utile?

La solution

Lorsque modèle correspond à l'intégration dans d'autres motifs que vous devez des allumettes envelopper le match incorporé soit avec ( ... ) ou begin ... end (sucre syntaxique pour parenthèses):

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 -> () ;;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top