我有以下特质:
sealed trait Sum[+A, +B]
final case class Failure[A](value: A) extends Sum[A, Nothing]
final case class Success[B](value: B) extends Sum[Nothing, B]
object Sum {
def flatMap[AA >: A, B, C](s: Sum[AA, B], f: B => Sum[AA, C]): Sum[AA, C] =
s match {
case Failure(v) => Failure(v)
case Success(v) => f(v)
}
def fold[A, B, C](s: Sum[A, B], success: A => C, failure: B => C): C =
s match {
case Failure(v) => failure(v)
case Success(v) => success(v)
}
def map[A, B, C](s: Sum[A, B], success: A => C): Sum[A,C] =
fold(s, succ => Success(success(succ)), fail => Failure(fail))
}
并且编译器抱怨:
Cannot resolve symbol A
由:
flatMap[AA >: A, B, C]
我做错了什么?
答案 0 :(得分:4)
我做错了什么?
您正在为不存在的类型参数定义下限。在这种情况下,A
是什么?您告诉编译器"我希望AA具有类型A
"的下限,但编译器不知道泛型类型参数A
因为它没有被宣布。
如果你想拥有两个类型参数,其中一个是另一个的下界(或者更常见的是任何边界),则需要先声明它:
def flatMap[A, AA >: A, B, C]