根据我的有限知识,我知道编译器会自动继承集合返回类型,并根据它确定要返回的集合类型,因此在下面的代码中我想返回Option[Vector[String]]
。
我尝试使用以下代码进行试验,然后出现编译错误
type mismatch; found : scala.collection.immutable.Vector[String] required: Option[Vector[String]]
代码:
def readDocument(v:Option[Vector[String]]) : Option[Vector[String]] =
{
for ( a <- v;
b <- a )
yield
{
b
}
}
答案 0 :(得分:2)
scala> for (v <- Some(Vector("abc")); e <- v) yield e
<console>:8: error: type mismatch;
found : scala.collection.immutable.Vector[String]
required: Option[?]
for (v <- Some(Vector("abc")); e <- v) yield e
^
scala> for (v <- Some(Vector("abc")); e = v) yield e
res1: Option[scala.collection.immutable.Vector[String]] = Some(Vector(abc))
嵌套x <- xs
表示flatMap
,仅当返回的类型与the most outer one的类型相同时才有效。
答案 1 :(得分:0)
for
理解已为您Option
取消装箱,所以这应该有效
def readDocument(v:Option[Vector[String]]) : Option[Vector[String]] =
{
for ( a <- v )
yield
{
a
}
}
答案 2 :(得分:0)
这个怎么样?
def readDocument(ovs: Option[Vector[String]]): Option[Vector[String]] =
for (vs <- ovs) yield for (s <- vs) yield s