Как получить параметр из индекса в коллекции в Scala?

Есть ли способ, используя только API-интерфейс коллекции Scala, получить параметр в списке при попытке получить элемент по его индексу?

Я ищу эквивалент этой функции, существует ли он?

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

Спасибо


person Loic    schedule 26.04.2013    source источник


Ответы (1)


Да, вы можете поднять свою коллекцию до функции 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
person drexin    schedule 26.04.2013
comment
Я уже видел lift для множества структур данных в Scala, в чем смысл именования (и абстракции)? - person kosii; 08.08.2016
comment
@kosii, возможно, немного запоздал с ответом, но в этом случае подъем относится к преобразованию частичной функции типа Int => T в общую функцию типа Int => Option[T]. Это довольно распространенный термин для обозначения перехода от чего-то менее общего к чему-то более общему или, другими словами, добавления новой структуры, т.е. преобразование монады в монадный преобразователь или преобразование функтора в свободную монаду. Я думаю, что этот термин пришел из теории категорий, но я не смог найти никаких конкретных ссылок. - person Vladimir Matveev; 13.11.2017