yield如何知道返回类型

时间:2017-03-20 11:32:01

标签: scala

我有以下代码段:

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]

1 个答案:

答案 0 :(得分:4)

为了理解,编译器会对flatMapmapwithFilter的调用感到厌烦。

for {
  aa <- this
  bb <- b
} yield (f(aa, bb))

==

this.flatMap(aa => b.map(bb => f(aa, bb)))

因此,理解的结果取决于flatMapmap方法的类型签名和实现。