我有这个简单的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#book中的“Pattern Matching”部分看到了一个类似的例子。因此,在F#的后期版本中可能会更改某些内容?
答案 0 :(得分:17)
我认为答案the previous question(和the comments - “一般情况下,在最后一种模式中设置守卫是一种反模式” - - by kimsk )解释情况。
但是,我不会说在最后一个模式中有一个后卫是反模式 - 这是最简单的解决方法,但我觉得这有点不幸,因为when
模式为您提供有关您可以期望的值的有用信息 - 这使得理解程序更容易。上次我有这个问题,我把它留在那里,至少作为评论:
let compareNum x =
let y = 10
match x with
| _ when x = y -> 0
| _ when x > y -> 1
| _ (*when x < y*) -> -1