Шаблоны исключений должны быть на верхнем уровне соответствия - PullRequest
0 голосов
/ 12 мая 2018

Это компилируется:

let inputFile = open_in("test.txt");
let line = try(input_line(inputFile)) {
| End_of_file => "end of file"
};
print_endline(line);

Но не это:

let inputFile = open_in("test.txt");
try(input_line(inputFile)) {
| line => print_endline(line)
| exception End_of_file => print_endline("end of file")
};

Для последнего я получаю сообщение об ошибке: «Шаблоны исключений должны быть на верхнем уровне совпадений»

Я запутался, потому что это похоже на тот же шаблон, что и в документах (https://reasonml.github.io/docs/en/exception.html)

let theItem = "a";
let myItems = ["b","a","c"];
switch (List.find((i) => i === theItem, myItems)) {
| item => print_endline(item)
| exception Not_found => print_endline("No such item found!")
};

, который компилируется без ошибок.

Изменение порядкаиз случаев совпадения или удаление ключевого слова «исключение» не меняет ошибку.

Что означает эта ошибка? Я не уверен, что означает «верхний уровень».

1 Ответ

0 голосов
/ 13 мая 2018

try используется с обработкой исключений, аналогичной try/catch в JavaScript. В вашем случае вы хотите выполнить сопоставление с образцом, а также перехватить исключение (что позволяет reasonml), поэтому вы можете просто использовать switch.

let inputFile = open_in("test.txt");
switch(input_line(inputFile)) {
| line => print_endline(line) 
| exception End_of_file => print_endline("end of file")
};
...