scala - 缺少非详尽匹配的警告

标签 scala pattern-matching

为什么以下不产生警告,当 -unchecked已启用:

object Order {
   sealed trait EntryOption
   case object EmptyEntry extends EntryOption
   trait Entry extends EntryOption

   def isEmpty(a: EntryOption): Boolean = a match {
      case EmptyEntry => true
//    case _: Entry   => false
   }
}

看来我正好有 same problem before在 Scala 2.8.0 的时代,没有足够的答案。

编辑

@Jed 仅对非抽象类发出警告对我来说没有意义Entry .考虑以下情况:
trait Order {
  sealed trait EntryOption
  case object EmptyEntry extends EntryOption
  abstract sealed class Entry extends EntryOption

  def isEmpty(a: EntryOption): Boolean = a match {
    case EmptyEntry => true
 // case _: Entry   => false
  }
}

trait OrderImpl extends Order {
  final class EntryImpl extends Entry
}

使警告出现的唯一方法是有一个具体的类 EntryOrder !

最佳答案

它确实在主干上提示:

scala> object Order {
     |    sealed trait EntryOption
     |    case object EmptyEntry extends EntryOption
     |    trait Entry extends EntryOption
     | 
     |    def isEmpty( a: EntryOption ) : Boolean = a match {
     |       case EmptyEntry => true
     | //    case _: Entry   => false
     |    }
     | }
<console>:18: warning: match is not exhaustive!
missing combination          Entry

          def isEmpty( a: EntryOption ) : Boolean = a match {
                                                    ^
defined module Order

关于scala - 缺少非详尽匹配的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8291170/

相关文章:

scala - 如何在 Akka actor 中等待文件上传流完成

scala - Play 2 - 在所有响应上设置标题?

string - 如何在 FSharp 中提取字符串的中间部分?

algorithm - 特定对象/图像识别任务的最佳方法?

scala - Scala 中的模式匹配结构类型

java - 发送多个 singleRequest 时出现 Akka BufferOverflowException

postgresql - Slick 3批更新

scala - 如何在 Scala 中获取泛型函数的实际类型?

algorithm - 有效地找到直线的斜率

java - 如何使用 Java 中的模式匹配器类从给定的字符串中查找匹配的两个或多个单词?