Обработка исключения Ocaml для открытия входного канала
-
25-09-2019 - |
Вопрос
Как новичок в 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 -> () ;;