是否有一种方法,仅尝试使用Scala集合API在尝试通过索引获取元素时在List中获取Option?
我正在寻找与此功能等效的功能,它存在吗?
def optionalValue[T](l: List[T], index: Int) = {
if (l.size < (index+1)) None
else Some(l(index))
}
谢谢
Answers:
是的,您可以将集合提升为一个功能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
Int => T
的全部函数的转换Int => Option[T]
。从一个较不通用的东西转换为一个更通用的东西,换句话说,就是“添加”一个新的结构,例如将一个monad转换为monad转换器,或者将一个functor转换为一个自由monad,这是一个非常普遍的术语。我认为该术语来自类别理论,但是我找不到任何明确的参考。
lift
在Scala中看到了很多数据结构,命名(和抽象)背后的原理是什么?