Scala通用类型和子类型

时间:2014-05-22 17:49:18

标签: scala generics subtyping

abstract class Dog[+T,-U,V] {
    def bark[A >: Dog[T,Dog[U,T,V],Dog[V,V,V]], B <: Dog[U,T,V]](
    stranger: A,
    listener: (Dog[U,T,A]=>B)=>B
    ): Dog[Dog[T,U,V], T=>U, B]
}

这是我作业上的一个问题,这让我很困惑。问题是编译器是否会报告错误。我理解协变和逆变是如何与单一类型一起工作的。

以下是我对这个问题的看法,如果有错,请指正。

def bark[A >: Dog[T,Dog[U,T,V],Dog[V,V,V]], B <: Dog[U,T,V]]

此行A和B都是类型参数位置,应该翻转,B应该是B&gt;:Dog [U,T,V],但对于程序的其他部分,我不知道发生了什么

0 个答案:

没有答案