假设我有一个带有类型参数的类和一个方法,该方法仅在使用具有表示类型的特定特征参数化该类时才应返回实例的副本。我可以很容易地做到这一点。我不能做的是给该方法一个合理的返回类型:
case class Foo[+A](a: A) {
// Compiles
def gotFooBar(implicit evidence: A <:< Bar[_]) = copy(a = a.Copy())
// Does not compile
def gotFooBar(implicit evidence: A <:< Bar[_]): Foo[A] = copy(a = a.Copy())
}
trait Bar[+B <: Bar[B]] {
def Copy(): B // Return underlying type
}
case class Grill() extends Bar[Grill] {
def Copy() = Grill()
}
该函数的返回类型是什么,或者更重要的是,我将如何设置类型以使其成为返回类型?有人还可以指出真正的返回类型如何可能是 的超类型Foo[A]
?