문제

As a beginner in Ocaml, I have this current working code:

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

Now I would like to add error handling for non-existing input files, I wrote this:

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

and get an error message: This pattern matches values of type 'a option but is here used to match values of type exn for the last line. If I substitute None for _, I get an error about incomplete matching.

I read that exn is the exception type. I'm sure I don't understand what is really going on here, so please point me to the right direction. Thanks!

도움이 되었습니까?

해결책

When embedding pattern matches inside other pattern matches you need to encase the embedded match with either ( ... ) or begin ... end (syntactic sugar for parentheses):

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 -> () ;;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top