0

有没有更好/更短/更简洁的方法来写这个?

def elementOrNone[T](values: List[T], index: Int): Option[T] =
   values match { 
    case Nil => None
    case _ => Some(values(index))
}
4

2 回答 2

8

是的

val xs = List(1,2,3)
scala> xs.lift(1)
//res2: Option[Int] = Some(2)

scala> xs.lift(10)
//res3: Option[Int] = None

scala> val ys = List.empty[Int]
// ys: List[Int] = List()

scala> ys.lift(0)
// res1: Option[Int] = None

(但与您的代码不同,如果您要求索引大于集合大小的元素,lift 不会抛出 java.lang.IndexOutOfBoundsException ——我不知道这对您是好是坏)。

于 2013-06-19T12:38:36.113 回答
0

这里列表有一个提升方法。如果你需要做一些与其他 API 非常相似的事情,你可以自己编写 lift 方法。我已经看到了一个从 JDBC 驱动程序中提升 getConnection 的示例,因此可以安全地使用它。

于 2013-06-19T12:55:01.240 回答