异常模式必须位于匹配大小写的顶层

时间:2018-05-12 20:18:16

标签: exception file-io pattern-matching reason

编译:

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 :(得分:2)

try用于处理类似于JavaScript中的try/catch的异常处理。在您的情况下,您希望进行模式匹配并捕获异常(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")
};