Exhaustiveness check In Pattern Matching 模式匹配穷尽检查

在OCaml中,所有的模式匹配都必须穷尽所有可能,否则编译器会报错。但是在moonbit中,当模式匹配的返回值为Unit时,没有这种限制。

match [] {
  [1,2,3] => something_that_returns_unit()
  // falls through silently
}

我希望moonbit提供一些语法结构使得这个选项成为可能。

MoonBit支持对模式匹配的穷尽检查,默认情况下,编译器会对不穷尽的pattern matching会提出警告。可以通过配置moon.pkg.json的warn-list选项将这个警告视为错误:

"warn-list": "@11"
1 个赞

MoonBit 里并没有你说的这种对返回 Unitmatch 特殊处理的规则。如果你看到一个不完备的模式匹配没有报 warning,可能的原因是代码里有其他的 fatal error,此时不会做模式匹配完备性的检查。如果代码里没有 fatal error、没有关闭模式匹配完备性的 warning 的情况下,依然没有看到 warning 的话,就是模式匹配检查的 bug,可以去 GitHub - moonbitlang/moonbit-docs: The docs of MoonBit programming language 开个 issue

1 个赞

测试了下,确实是因为有Fatal Error所以没进行穷尽检查,感谢