Есть ли функция идентификации scala?


если у меня есть что-то вроде List[Option[A]] и я хочу преобразовать это в List[A], стандартный способ использовать flatMap:

scala> val l = List(Some("Hello"), None, Some("World"))
l: List[Option[java.lang.String]] = List(Some(Hello), None, Some(World))

scala> l.flatMap( o => o)
res0: List[java.lang.String] = List(Hello, World)

теперь o => o это просто функция идентификации. Я бы подумал, что есть какой-то способ сделать:

l.flatMap(Identity) //return a List[String]

однако, я не могу заставить это работать, как вы не можете генерировать object. Я попробовал несколько вещей, но безрезультатно; у кого-нибудь есть что-то вроде этой работы?

3 62

3 ответа:

есть удостоверение

FWIW, на Scala 2.8 вы просто звоните flatten на нем. Томас он в основном покрыт для Scala 2.7. Он пропустил только один альтернативный способ использования этой личности:

l.flatMap[String](identity)

Он не будет работать с обозначением оператора, однако (кажется, что обозначение оператора не принимает параметры типа, что хорошо знать).

вы можете и вызов flatten на Scala 2.7 (на List, по крайней мере), но он ничего не сможет сделать без типа. Однако, это работает:

l.flatten[String]

вы могли бы просто дать тип inferencer немного помочь:

scala> val l = List(Some("Hello"), None, Some("World"))
l: List[Option[java.lang.String]] = List(Some(Hello), None, Some(World))

scala> l.flatten[String]
res0: List[String] = List(Hello, World)