【发布时间】:2013-09-12 13:14:40
【问题描述】:
我有这个简单的 F# 函数:
let compareNum x =
let y = 10
match x with
| _ when x = y -> 0
| _ when x > y -> 1
| _ when x < y -> -1
但是,F# 编译器给了我“此表达式的不完整模式匹配”警告。在这种情况下,所有案例都应涵盖所有模式。
我还在 Chris Smith 编写的 Programming F# 书的第一版中的“模式匹配”部分看到了一个类似的示例。那么在 F# 的更高版本中可能会有所改变?
【问题讨论】:
-
编译器假定任何带有
when保护的代码都是不完全匹配的。它不优雅,并且会产生如您所见的误报。 -
谢谢!我喜欢上述问题中的一个答案所说的:“一般来说,在最后一个模式中有一个 when 守卫是一种反模式。”我认为现在说得通。
-
这是使用“if”不仅更惯用的情况之一——它也是一种更好的测试编码方式。
标签: f# pattern-matching guard-clause