【发布时间】:2019-03-03 22:49:54
【问题描述】:
用例
我有一个文件列表,这些文件可能具有或不具有有效的 mime 类型。 在我的代码中,我使用选项来表示这一点。
我需要将 Seq[Option[T]] 转换为 Option[Seq[T]] 以便在某些文件无效时不处理列表。
错误
这是以下实现中的错误:
found : (Option[Seq[A]], Option[A]) => Option[Seq[A]]
[error] required: (Option[Any], Option[Any]) => Option[Any]
[error] s.fold(init)(liftOptionItem[A])
实施
def liftOptionItem[A](acc: Option[Seq[A]], itemOption: Option[A]): Option[Seq[A]] = {
{
acc match {
case None => None
case Some(items) =>
itemOption match {
case None => None
case Some(item) => Some(items ++ Seq(item))
}
}
}
}
def liftOption[A](s: Seq[Option[A]]): Option[Seq[A]] = {
s.fold(Some(Seq()))(liftOptionItem[A])
}
此实现返回Option[Any] 而不是Option[Seq[A],因为liftOptionItem[A] 的类型不适合。
【问题讨论】:
-
这似乎是stackerflow的重复主题,请参考stackoverflow.com/questions/28753777/…概念与此处相同......
-
@legramira 谢谢。您能否将此问题作为重复项关闭,谢谢。很抱歉在问这个问题之前没有搜索
-
Some(acc.map(_.get))
标签: scala fold scala-option