2013-04-26 53 views
48

有沒有一種方法,只使用Scala的集合API,當試圖通過其索引獲取元素時,在列表中獲取選項?如何從Scala的Collection中的索引獲取選項?

我正在尋找這個功能的等價物,它存在嗎?

def optionalValue[T](l: List[T], index: Int) = { 
    if (l.size < (index+1)) None 
    else Some(l(index)) 
} 

感謝

回答

104

是的,你可以解除您的收藏功能Int => Option[A]

scala> List(1,2,3).lift 
res0: Int => Option[Int] = <function1> 

scala> List(1,2,3).lift(9) 
res1: Option[Int] = None 
+0

不錯!謝謝! – Loic 2013-04-26 07:53:36

+10

我已經在Scala中看到了很多數據結構的'lift',命名(和抽象)背後的基本原理是什麼? – kosii 2016-08-08 15:14:58

+2

@kosii可能遲了一點,但在這種情況下,「lift」是指從'Int => T'類型的部分函數轉換爲'Int => Option [T]'類型的總函數。這是一個相當普遍的用語,從較不普遍的東西轉變爲更一般的東西,換句話說,「添加」一個新的結構,例如將monad轉換爲monad變換器,或將仿函數轉換爲自由monad。我認爲這個詞來自類別理論,但我找不到任何明確的參考。 – 2017-11-13 18:03:18

相關問題