让我说我有这样的事情:
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)但是我不知道这是不是正确的事情......
答案 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。