OCaml警告错误伪行号

OCaml警告错误伪行号,ocaml,Ocaml,当我有一个文件foo.ml: let foo = [];; let bar = match [] with | [] -> [];; 我尝试将第4行的缺失匹配案例标记为错误: #warn_error "+8";; #use "foo.ml";; 在我的#use输出结束之前,我得到了一个对第1行的伪行引用: val foo : 'a list = [] File "foo.ml", line 4, characters 2-26: Warning 8: this pattern

当我有一个文件
foo.ml

let foo = [];;

let bar =
  match [] with
  | [] -> [];;
我尝试将第4行的缺失匹配案例标记为错误:

#warn_error "+8";;
#use "foo.ml";;
在我的
#use
输出结束之前,我得到了一个对第1行的伪行引用:

val foo : 'a list = []
File "foo.ml", line 4, characters 2-26:
Warning 8: this pattern-matching is not exhaustive.
Here is an example of a value that is not matched:
_::_
File "foo.ml", line 1:
Error: Some fatal warnings were triggered (1 occurrences)

这当然不是一个真正的问题,但我仍然觉得伪线参考令人恼火。有没有办法说服OCaml不要打印输出中不相关的
文件“foo.ml”,第1行:
行?

我不认为这完全是伪造的。它指的是关于整个文件的一个事实。他们不得不选择一些线条来代表整个文件。

我不认为这完全是伪造的。它指的是关于整个文件的一个事实。他们必须选择一些行来表示整个文件。

不幸的是,编译器就是这样工作的。您可以在中找到此功能的源代码。实现致命警告的方法是生成与文件本身相关的错误消息:

| Warnings.Errors n ->
    Some
      (errorf ~loc:(in_file !input_name)
      "Some fatal warnings were triggered (%d occurrences)" n)
文件中的
函数就是您看到“第1行”的原因:


此数据类型缺少一种表示位置的方法,该位置作为文件名而不是行号。

不幸的是,编译器就是这样工作的。您可以在中找到此功能的源代码。实现致命警告的方法是生成与文件本身相关的错误消息:

| Warnings.Errors n ->
    Some
      (errorf ~loc:(in_file !input_name)
      "Some fatal warnings were triggered (%d occurrences)" n)
文件中的
函数就是您看到“第1行”的原因:


此数据类型缺少一种表示位置的方法,该位置表示为文件名,但没有行号。

我明白了,谢谢您的回答。不过,这还是会让人分心:我的眼睛一直盯着输出的末尾,想找出我的问题在哪一行,然后那里有一个不相关的行号。所以对此无能为力?我明白了,谢谢你的回答。不过,这还是会让人分心:我的眼睛一直盯着输出的末尾,想找出我的问题在哪一行,然后那里有一个不相关的行号。所以对此无能为力?谢谢,是的,我已经找到了那个代码。我认为,如果文件名是
“//toplevel//”
,那么就不会打印该行。我想知道我是否可以利用一些东西来压制这条线,但我想它不会起作用。似乎有。埃蒂安:很好,谢谢你指出这一点!我会耐心等待:-)谢谢,是的,我已经找到了那个代码。我认为,如果文件名是
“//toplevel//”
,那么就不会打印该行。我想知道我是否可以利用一些东西来压制这条线,但我想它不会起作用。似乎有。埃蒂安:很好,谢谢你指出这一点!我会耐心等待:-)