gpt4 book ai didi

coding-style - Ocaml:糟糕的风格,此模式匹配中的所有子句都受到保护

转载 作者:行者123 更新时间:2023-12-04 10:01:43 25 4
gpt4 key购买 nike

我得到一个 "Error: Warning 25: bad style, all clauses in this pattern-matching are guarded"
“守卫”是什么意思?

我的代码具有模式匹配-

match z with
| y when List.length z = 0 -> ...
| y when List.length z > 0 -> ...

最佳答案

守卫是when部分。编译器告诉您的是,它无法判断您的匹配是否详尽(涵盖所有可能的情况),但可能不是。编译器不能真正确定,因为对于任意表达式,穷举性是不可判定的。编译器只是认为你应该至少有一个没有保护的模式,因为当匹配是详尽的时,最后一种情况的保护将是多余的。

由于您知道您的匹配是详尽无遗的,因此编译器基本上是正确的。你的第二个守卫是多余的。你可以把它关掉,意思没有区别:

match z with
| y when List.length z = 0 -> ...
| y -> ...

这将使编译器高兴。

我喜欢这个警告;多年来,它为我发现了一些逻辑错误。

如果这段代码不仅仅是一个例子,而是你真正写的,那么像这样写会更惯用:
match z with
| [] -> ...
| head :: tail -> ...

它也更有效一点,因为它不会费心计算列表的长度然后丢弃结果。

如果你不需要解构列表,你可以让它更简单:
if z = [] then
...
else
...

关于coding-style - Ocaml:糟糕的风格,此模式匹配中的所有子句都受到保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8515222/

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