gpt4 book ai didi

scala - 为什么 flatMap 链在第一个 Left 值处停止但在 Right 值处继续

转载 作者:行者123 更新时间:2023-12-01 09:42:28 27 4
gpt4 key购买 nike

我不明白这一行:Right(1).flatMap(_ => Left(2)).flatMap(_ => Left(3))

Right(1) 被传递给 .flatMap(_ => Left(2)。它返回 Left(2) 这是传递给 .flatMap(_ => Left(3)。它应该返回 Left(3)。但它返回 Left(2).

为什么会这样?

另一个例子是 Right(1).flatMap(_ => Right(2)).flatMap(_ => Right(3))

它返回 Right(3)(应该有)。

据我了解,它的工作原理如下:Right(1) 被传递给 .flatMap(_ => Right(2))。它返回 Right(2) 并传递给 .flatMap(_ => Right(3)。最后它返回 Right(3)

Scala fiddle

最佳答案

原因是从 Scala 2.12 开始,Either 是右倾。这意味着当结果离开时,像 flatMap 这样的操作将停止计算。检查实现以了解它:

def flatMap[EE >: E, B](f: A => Either[EE, B]): Either[EE, B] =
this match {
case Left(value) => Left(value)
case Right(value) => f(value)
}

因此,您可以在 Left 的情况下看到它构造的 Left 具有从中提取的值 而不应用 f

关于scala - 为什么 flatMap 链在第一个 Left 值处停止但在 Right 值处继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57995577/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com