Scala 可以在密封类型上的模式匹配不详尽时发出警告,但是我们可以检查一个函数在返回类型是密封的情况下是否返回所有情况?例如,考虑以下 ADT
sealed trait Foo
case object Bar extends Foo
case object Qux extends Foo
然后f: Foo => String
对代数数据类型起作用Foo
def f(x: Foo): String = x match {
case Bar => "bar"
}
发出警告
match may not be exhaustive.
It would fail on the following input: Qux
def f(x: Foo) = x match {
当返回类型是 ADT 时,是否可以引发类似的未用尽警告,例如在以下实现中f: String => Foo
:
def f(x: String): Foo = x match {
case "bar" => Bar
// warn because we never return Qux
}