如何抑制编译器对不完整模式匹配的警告

How to suppress compiler warnings on incomplete pattern match

好的,好的 - 我知道这通常是一个坏主意。尽管如此,在一个非常具体的上下文中——在我的测试用例中,我只期望一个特定的结果,而其他任何东西都会以任何方式出现错误。进行模式匹配只会掩盖我的测试代码。

举个例子

type Result =
     | Success of int * int
     | Error of String

let someFunc x : Result = // implementation not important here

// and then later in my test code

[<Test>]
member me.``Some Cool Test Method``() =
    let (Success x, y) = someFunc "Foo"
    equals x 1
    equals y 2

关于如何使它更令人愉快和编译器友好的任何想法?

您可以通过在不完整的模式匹配之前的某处插入此行来禁用警告:

#nowarn "0025"

我之前也用过它进行一些快速测试,很可能是您描述的场景。

另一个选项可能是您通过 进行模式匹配 引用的选项是使用通配符 _ 捕获所有其他情况并抛出错误:

[<Test>]
member me.``Some Cool Test Method``() =
    match someFunc "Foo" with
    | (Success x, y) ->
        equals x 1
        equals y 2
    | _ -> failwith "unexpected value"

那么编译器会快乐,如果你知道它永远不会到达那里,你就不会关心进一步处理那个错误,因为你知道它永远不会被抛出。

你为什么不这样写测试呢?

[<Test>]
member me.``Some Cool Test Method``() =
    let actual = someFunc "Foo"

    let expected = Success(1, 2)
    equals expected actual

这不会生成任何您需要抑制的警告。