我是否必须使用显式匹配语句来标识其通配符值?

时间:2016-04-07 15:11:50

标签: f#

我是否必须使用显式匹配语句来标识其通配符值?

例如,请执行以下功能:

let (|Positive|Neutral|Negative|) = function
    | x when x > 0 -> Positive
    | x when x = 0 -> Neutral
    | x when x < 0 -> Negative
    | _            -> failwith (sprintf "unknown: %d" _)

错误:

  

意外的符号&#39; _&#39;在表达

我了解到我可以毫无错误地做到这一点:

let (|Positive|Neutral|Negative|) v =
    match v with
    | x when x > 0 -> Positive
    | x when x = 0 -> Neutral
    | x when x < 0 -> Negative
    | _            -> failwith (sprintf "unknown: %d" v)

更新

以下是发布的答案的结果:

let (|Positive|Neutral|Negative|) = function
    | x when x > 0 -> Positive
    | x when x = 0 -> Neutral
    | x when x < 0 -> Negative
    | x            -> failwith (sprintf "unknown: %d" x)

1 个答案:

答案 0 :(得分:2)

您可以将其更改为此功能,它将起作用:

let (|Positive|Neutral|Negative|) = function
    | x when x > 0 -> Positive
    | x when x = 0 -> Neutral
    | x when x < 0 -> Negative
    | f          -> failwith (sprintf "unknown: %d" f)