我有以下代码段:
sealed trait Either[+E, +A] {
def map2[EE >: E, B, C](b: Either[EE, B])(f: (A, B) => C): Either[EE, C] =
for {
aa <- this
bb <- b
} yield (f(aa, bb))
}
case class Left[+E](get: E) extends Either[E, Nothing]
case class Right[+A](get: A) extends Either[Nothing, A]
for comprehension如何知道,返回哪种类型?对我来说,目前尚不清楚C类型是否返回Either[EE, C]
。
答案 0 :(得分:4)
为了理解,编译器会对flatMap
,map
和withFilter
的调用感到厌烦。
for {
aa <- this
bb <- b
} yield (f(aa, bb))
==
this.flatMap(aa => b.map(bb => f(aa, bb)))
因此,理解的结果取决于flatMap
和map
方法的类型签名和实现。