flatMap игнорирует результат - PullRequest
5 голосов
/ 29 января 2020

Мне было интересно, существует ли функция (в scala или cats), которая опускает результат в flatMap. Например,

Some("ignore this").ignoreArgumentFlatMap(Some("result"))

, что соответствует

Some("ignore this").flatMap(_ => Some("result"))

1 Ответ

7 голосов
/ 29 января 2020

У кошек он называется >>.

scala> import cats.implicits._
import cats.implicits._

scala> Option("ignore this") >> Some("result")
res14: Option[String] = Some(result)

В документации явно сказано

Псевдоним для fa.flatMap (_ => fb).

В отличие от *>, fb определяется как параметр по имени, что позволяет использовать этот метод в тех случаях, когда вычисление fb небезопасно, если не приостановлено в flatMap.

Также есть productR или *>.

scala> Option("ignore this").productR(Some("result"))
res15: Option[String] = Some(result)

scala> Option("ignore this") *> Some("result")
res16: Option[String] = Some(result)

Как и do c, его аргумент не является псевдонимом. Так что это более или менее эквивалентно

val x0 = Some("result")
Some("ignore this").flatMap(_ => x0)

Там есть productREval, если вы хотите альтернативную стратегию оценки.

...