gpt4 book ai didi

ocaml - 在特定行中禁止来自 OCaml 的警告

转载 作者:行者123 更新时间:2023-12-01 08:03:20 25 4
gpt4 key购买 nike

我目前正在构建一个项目,该项目允许使用不同数量的参数(但所有参数类型相同)的不同类型的函数。为了定义这些函数,我对每个函数都使用了以下代码:

let {name} [a; b; {...}] =
{...}

我的代码确保列表中的元素数量正确,如果不是这种情况,我只会发生运行时错误。但是我遇到了一个警告,我想隐藏它,因为我知道这种模式匹配并非详尽无遗,而且我不想看到没有警告我的警告,因为我有真正的错误制作。

另一方面:如果存在像 Dafny(来自微软)这样的语言,那就是功能性的,我很乐意尝试这种语言。

编辑:如果没有办法做到这一点,请回答准确说明。在这种情况下,我会构建一个命令行工具来过滤掉这些警告。 (但这会很遗憾地删除所有已完成的格式设置...)

最佳答案

正如您最有可能知道的,您可以这样写:

let name = function
| [a; b; ... ] -> { ... }
| _ -> failwith "not possible"

但是你可以(如果你坚持)通过写 [@warning "-8"] 来禁用警告。 let之间和函数名。
$ cat warn.ml
let f [a; b] = a + b
$ ocamlc -c warn.ml
File "warn.ml", line 1, characters 6-20:
Warning 8: this pattern-matching is not exhaustive.
Here is an example of a value that is not matched:
(_::_::_::_|_::[]|[])

$ cat nowarn.ml
let [@warning "-8"] f [a; b] = a + b
$ ocamlc -c nowarn.ml
$

更新

我找到了一种方法来重新打开函数体的警告,尽管它看起来很笨重:
$ cat semiwarn.ml
let [@warning "-8"] f [a; b] =
begin [@warning "+8"]
let a' =
match a with
| 0 -> 14
| 1 -> 15
in
a' + b
end
$ ocamlc -c semiwarn.ml
File "semiwarn.ml", line 4, characters 4-52:
Warning 8: this pattern-matching is not exhaustive.
Here is an example of a value that is not matched:
2

如您所见,函数体中的匹配有警告,但函数参数没有。

总而言之,如果您希望人们阅读代码,这似乎有点过于困惑,而不是一个好的选择。

关于ocaml - 在特定行中禁止来自 OCaml 的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40204547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com