Обработка исключения Ocaml для открытия входного канала

StackOverflow https://stackoverflow.com/questions/2396456

Вопрос

Как новичок в Ocaml, у меня есть этот текущий рабочий код:

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

Теперь я хотел бы добавить обработку ошибок для не существующих входных файлов, я написал это:

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

и получите сообщение об ошибке: Этот шаблон соответствует значениям опции типа, но здесь используется для сопоставления значений типа EXN для последней строки. Если я заменив Никто для _, Я получаю ошибку о неполном сопоставлении.

Я прочитал это экспонат это тип исключения. Я уверен, что я не понимаю, что здесь действительно происходит, пожалуйста, укажите меня в правильное направление. Спасибо!

Это было полезно?

Решение

При встраивании шаблонов сочетается в других списках с рисунком, вам необходимо связать встроенное совпадение с любым ( ... ) или begin ... end (синтаксический сахар для скобок):

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