Scala:模式匹配 Seq[Nothing]

标签 scala

我试图匹配 Seq 的情况包含 Nothing .

models.Tasks.myTasks(idUser.toInt) match {
  case tasks => tasks.map {
    task => /* code here */
  }
  case _ => "" //matches Seq(models.Tasks)
}

怎么样Seq[Nothing]用模式匹配表示?

最佳答案

与空序列匹配如下所示:

val x: Seq[Nothing] = Vector()

x match { 
  case Seq() => println("empty sequence") 
}

编辑:请注意,这比 case Nil 更通用自 Nil仅是 List 的子类,不是 Seq一般来说。奇怪的是,编译器可以匹配 Nil如果类型被显式注释为 Seq , 但如果类型是任何非 List ,它会提示Seq的子类.因此你可以这样做:
(Vector(): Seq[Int]) match { case Nil => "match" case _ => "no" }

但不是这个(因编译时错误而失败):
Vector() match { case Nil => "match" case _ => "no" }

关于Scala:模式匹配 Seq[Nothing],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13068080/

相关文章:

scala - 模式匹配 - 值不是绑定(bind)变量的成员

generics - 初学者 : How do I say "any superclass of generic A"

Scala 模式匹配两个绑定(bind)变量的类型

scala - 是否可以从 Tree 和 MethodSymbol 生成 Apply?

scala - (泛型)之间有什么区别吗

scala - 如何使用 Scala(spark) 逐行读取文本文件并使用分隔符拆分并将值存储在各个列中?

scala - 这个示例Play框架代码中unapply有什么用(表单映射)

scala - 将列表项映射到 org.apache.spark.sql.Column 类型

scala - Scala 中带有列表的递归类型

scala - 无标签final中的parSequence和parTraverse