在OCaml中,所有的模式匹配都必须穷尽所有可能,否则编译器会报错。但是在moonbit中,当模式匹配的返回值为Unit时,没有这种限制。
match [] {
[1,2,3] => something_that_returns_unit()
// falls through silently
}
我希望moonbit提供一些语法结构使得这个选项成为可能。
在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"
MoonBit 里并没有你说的这种对返回 Unit
的 match
特殊处理的规则。如果你看到一个不完备的模式匹配没有报 warning,可能的原因是代码里有其他的 fatal error,此时不会做模式匹配完备性的检查。如果代码里没有 fatal error、没有关闭模式匹配完备性的 warning 的情况下,依然没有看到 warning 的话,就是模式匹配检查的 bug,可以去 GitHub - moonbitlang/moonbit-docs: The docs of MoonBit programming language 开个 issue
测试了下,确实是因为有Fatal Error所以没进行穷尽检查,感谢