如何解开没有模式匹配的歧视联盟?

时间:2017-06-22 04:05:34

标签: f#

我有一个像这样的歧视联盟:

Type Result =
| Good of bool | Bad of bool

在很多情况下,我知道结果是好的。要打开结果,我必须使用模式匹配仅适用于Good选项。结果我收到一条警告(不是错误),上面写着“此表达式上的模式匹配不完整......”。有没有办法解开,而不必使用模式匹配?

2 个答案:

答案 0 :(得分:6)

您可以使用let,例如

type Result =
    | Good of bool 
    | Bad of bool

let example = Good true

let (Good unwrappedBool) = example

请注意,这仍然会导致编译器警告匹配情况可能不完整。

但从技术上讲,这仍然是使用模式匹配,只是在没有match表达式的情况下这样做。

答案 1 :(得分:4)

您可以像其他任何类型一样向联合添加方法,如下所示:

type Result =
    | Good of bool
    | Bad of bool
    with
        member x.GoodValue =
            match x with
            | Good b -> b
            | Bad _ -> failwith "Not a good value"

[<EntryPoint>]
let main argv = 

    let r = Good true
    let s = Bad true

    printfn "%A" r.GoodValue
    printfn "%A" s.GoodValue // You know what happens..!

    0