sni*_*10m 2 f# pattern-matching
我想知道 F# 中是否存在代码功能(不是编译器功能),可以使不完整的模式匹配出现为错误,而不是警告。
我需要这个能够根据具体情况进行处理。即,在代码中的某些地方,我希望不完整的模式匹配成为警告,而在同一程序集中的其他地方,我希望它成为错误。因此,如完整模式匹配的编译时约束所建议的那样,设置编译器标志以将所有不完整模式匹配警告视为错误是不够的。
这可能看起来像
type MyUnion = First | Second
let foo x =
match x with
| First -> "hello"
// raises a compile-time warning
let bar x =
[<AssertCompleteMatch>]
match x with
| First -> "hello"
// raises a compile-time error
Run Code Online (Sandbox Code Playgroud)
或者该属性可能会应用于该类型,以确保与该特定类型的所有模式匹配都是完整的。
您可以将警告 25 视为错误,然后使用
#nowarn "0025"
Run Code Online (Sandbox Code Playgroud)
在您想要明确忽略它的文件中。但禁用警告是文件范围,而不是匹配范围。我想这是你能做的最好的事情了。