15

我有这个简单的 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# 的更高版本中可能会有所改变?

4

1 回答 1

19

我认为上一个问题的答案(以及评论—— “一般来说,在最后一个模式中使用 when 守卫是一种反模式” ——kimsk 提供)解释了这种情况。

但是,我不会说在最后一个模式中有一个守卫是一种反模式——这是最简单的解决方法,但我觉得这有点不幸,因为该when模式为你提供了关于你可以预期的值的有用信息——这使得更容易理解程序。上次我遇到这个问题时,我把它留在那里,至少作为评论:

let compareNum x =
  let y = 10
  match x with
  | _ when x = y -> 0
  | _ when x > y -> 1
  | _ (*when x < y*) -> -1
于 2013-09-09T05:52:37.587 回答