0

根据我有限的知识,我知道编译器会自动继承集合返回类型,并基于它确定要返回的集合类型,所以在下面的代码中我想返回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
     }
}
4

3 回答 3

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并且仅当返回的类型与最外层的类型相同时才会起作用。

于 2013-03-19T13:39:22.283 回答
0

for理解已经为您拆箱,所以Option这应该有效

def readDocument(v:Option[Vector[String]]) : Option[Vector[String]] =    
{
  for ( a <- v )
  yield 
  {
    a
  }
}
于 2013-03-19T13:38:54.107 回答
0

这个怎么样?

  def readDocument(ovs: Option[Vector[String]]): Option[Vector[String]] =
    for (vs <- ovs) yield for (s <- vs) yield s
于 2013-03-19T14:20:42.550 回答