我有一个函数将包含空序列的选项转换为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.我可以在这里简化函数签名吗?
答案 0 :(得分:7)
修改:修改为包含@ Alexey的建议。
这可能是一个解决方案:
def emptyToNone[C <: Traversable[_]](seqOpt: Option[C]): Option[C] =
seqOpt.filter(_.nonEmpty)