F# 活动模式的联合情况是否始终需要通配符?

F# 活动模式的联合情况是否始终需要通配符?,f#,F#,活动模式的联合情况是否始终需要通配符 警告: 此表达式上的模式匹配不完整 let(|正|中性|负|)=函数 |x>0->正时的x |x=0时的x->空档 |x负时的x 当我将通配符作为工会案例插入时,警告得到解决: let (|Positive|Neutral|Negative|) = function | x when x > 0 -> Positive | x when x = 0 -> Neutral | x when x < 0 ->

活动模式的联合情况是否始终需要通配符

警告:

此表达式上的模式匹配不完整

let(|正|中性|负|)=函数
|x>0->正时的x
|x=0时的x->空档
|x<0->负时的x
当我将通配符作为工会案例插入时,警告得到解决:

let (|Positive|Neutral|Negative|) = function
    | x when x > 0 -> Positive
    | x when x = 0 -> Neutral
    | x when x < 0 -> Negative
    | _            -> failwith "unknown"
let(|正|中性|负|)=函数
|x>0->正时的x
|x=0时的x->空档
|x<0->负时的x
|带有“未知”的故障

我还遗漏了哪些情况?

当编译器(通常)无法检查保护时。但在这种特殊情况下,只需省去最后一个防护装置,因为您不会错过一个案例:

let (|Positive|Neutral|Negative|) = function
    | x when x > 0 -> Positive
    | x when x < 0 -> Negative
    | _ -> Neutral
let(|正|中性|负|)=函数
|x>0->正时的x
|x<0->负时的x
|中性

注意:对于
int
,这是可以的,
float
s需要更多的情况(
NaN
和无穷大),编译器在这方面不会帮助您(正如您刚刚发现的那样)。

您应该阅读F#规范第7.2.3节Active Patterns。我看过了。但是,我没有看到有关我收到的警告的信息。可能是
let (|Positive|Neutral|Negative|) = function
    | x when x > 0 -> Positive
    | x when x < 0 -> Negative
    | _ -> Neutral