Scala:集合的类型参数

时间:2016-09-12 13:55:22

标签: scala higher-kinded-types

我有一个函数将包含空序列的选项转换为None:

def emptyToNone[A](seqOpt: Option[Seq[A]]): Option[Seq[A]] = seqOpt match {
  case Some(Seq()) => None
  case _ => seqOpt
}

我想通过用类型参数替换Seq来使其更通用,因此它可以与其他Scala集合一起使用。

我能够这样做:

def emptyToNone[C[A] <: Traversable[A], A](seqOpt: Option[C[A]]): Option[C[A]] = seqOpt match {
  case Some(s) if s.isEmpty => None
  case _ => seqOpt
}

但我必须使用2种类型参数,C和A.我可以在这里简化函数签名吗?

1 个答案:

答案 0 :(得分:7)

修改:修改为包含@ Alexey的建议。

这可能是一个解决方案:

def emptyToNone[C <: Traversable[_]](seqOpt: Option[C]): Option[C] =
seqOpt.filter(_.nonEmpty)