【问题标题】:F# code attribute to treat "incomplete pattern match" as an errorF# 代码属性将“不完整的模式匹配”视为错误
【发布时间】:2017-08-07 19:12:26
【问题描述】:

我想知道 F# 中是否存在代码功能(而不是编译器功能),用于使不完整的模式匹配出现错误,而不是警告。

我需要这个能够根据具体情况进行处理。即,在代码中的某些地方,我希望不完整的模式匹配成为警告,而在同一程序集中的其他地方,我希望它成为错误。因此,正如Compile-time constraint for complete pattern match 所建议的那样,设置编译器标志来将所有不完整的模式匹配警告视为错误是不够的。

这可能看起来像

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

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

【问题讨论】:

  • 您能否更详细地解释一下这背后的原因?通常,您不希望有不完整的模式匹配。如果您发现自己经常这样做,很可能是您对域的建模不正确。
  • 我的建议是打开标志,然后修复所有匹配不完整的地方
  • 不确定您期望这样的“代码功能”是什么样子。如果某些东西在编译时起作用,它编译器特性。

标签: f# pattern-matching


【解决方案1】:

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

#nowarn "0025"

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 2013-09-12
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多