2011-04-01 45 views
2

返回的元組可以說我有這樣的事情:階從功能

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.我想要將這兩個值作爲元組返回。但是如果Some(v)不匹配任何東西,我該怎麼辦?我該返回什麼?沒有和(沒有,沒有)沒有工作。斯卡拉接受(空,空),但我沒有線索,如果這是正確的事情...

+0

'null'。當你的值可能爲空時,最好避免使用它,並使用'Option','Some'和'None'。 – Jesper 2011-04-01 13:09:44

回答

15

我不會有函數返回(Int, Option[Int]),而是Option[(Int, Option[Int])]

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

,或者稍短:Scala的存在,主要是與Java的互操作性

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

如果你想返回(無,無),你的「案例一些」行需要返回一個元組(選項,選項)。

正如您的示例中所寫,您的case Some正在返回(Int,Option)。這是假設你的v.id是一個Int和一些OtherLookup返回一個選項。