2010-03-07 4 views
3

En tant que débutant en Ocaml, j'ai ce code de travail actuel:exception Ocaml manipulation pour ouvrir la voie d'entrée

... 
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 est ici utilisé pour correspondre aux valeurs de type exn pour la dernière ligne. Si je remplace Aucun pour _, j'obtiens une erreur concernant la correspondance incomplète.

J'ai lu 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 dirigez-moi vers la bonne direction. Merci!

Répondre

6

Lorsque motif intégration correspond à l'intérieur d'autres motifs que vous correspond devez envelopper le match intégré soit (...) 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 ->() ;; 
+0

Merci, maintenant je vois que l'analyseur a pensé que « | Aucun ->() "appartient aux appariements de" try " – ron