将“不完整模式匹配”视为错误的 F# 代码属性

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)

或者该属性可能会应用于该类型,以确保与该特定类型的所有模式匹配都是完整的。

Bri*_*ian 6

您可以将警告 25 视为错误,然后使用

#nowarn "0025"
Run Code Online (Sandbox Code Playgroud)

在您想要明确忽略它的文件中。但禁用警告是文件范围,而不是匹配范围。我想这是你能做的最好的事情了。