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