如何从Scala的Collection中的索引中获取期权?


71

是否有一种方法,仅尝试使用Scala集合API在尝试通过索引获取元素时在List中获取Option?

我正在寻找与此功能等效的功能,它存在吗?

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

谢谢

Answers:


147

是的,您可以将集合提升为一个功能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

13
我已经lift在Scala中看到了很多数据结构,命名(和抽象)背后的原理是什么?
kosii

7
@kosii的答案也许有点晚,但是在这种情况下,“提升”是指从type的部分函数到typeInt => T的全部函数的转换Int => Option[T]。从一个较不通用的东西转换为一个更通用的东西,换句话说,就是“添加”一个新的结构,例如将一个monad转换为monad转换器,或者将一个functor转换为一个自由monad,这是一个非常普遍的术语。我认为该术语来自类别理论,但是我找不到任何明确的参考。
弗拉基米尔·马特维夫(Fladimir Matveev)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.