【发布时间】: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