scala从函数返回元组

时间:2011-04-01 01:46:47

标签: scala scala-2.8

让我说我有这样的事情:

def f () = {

   var v = someLookupToV()

   match v {
       case Some(v) => (v.id, someOtherLookup(v.id))
       case None => None // <<-- doesn't work, but I'm not sure what to put there!
   }

}

假设someLookupToV返回一些具有字段id的对象,然后我有一些基于v.id的其他查找。我想将这两个值作为元组返回。但如果某些(v)与任何东西不匹配,我该怎么办?我该怎么回事?无和(无,无)没有工作。 Scala接受了(null,null)但是我不知道这是不是正确的事情......

2 个答案:

答案 0 :(得分:15)

我不会让函数返回(Int, Option[Int]),而是Option[(Int, Option[Int])]

def f = someLookupToV match {
  case Some(v) => Some(v.id, someOtherLookup(v.id))
  case None => None
}

或者更短:

def f = someLookupToV.map(v => (v.id, someOtherLookup(v.id)))

答案 1 :(得分:1)

如果你想返回(None,None),你的“case Some”行需要返回一个元组(Option,Option)。

如您的示例所示,您的case Some正在返回(Int,Option)。假设您的v.id是Int,而someOtherLookup返回一个Option。