如何抑制编译器对不完整模式匹配的警告
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
这不会生成任何您需要抑制的警告。
好的,好的 - 我知道这通常是一个坏主意。尽管如此,在一个非常具体的上下文中——在我的测试用例中,我只期望一个特定的结果,而其他任何东西都会以任何方式出现错误。进行模式匹配只会掩盖我的测试代码。
举个例子
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
这不会生成任何您需要抑制的警告。