我已经读过Scala的协变函数返回类型。
但它的论证类型呢? FunctionX(T1,...,R)
与这一切有什么关系?
答案 0 :(得分:7)
如果查看任何FunctionX
类的文档,您将看到返回类型是共变量且参数类型是逆变的。例如,Function2具有签名:
Function2[-T1, -T2, +R] extends AnyRef
您可以在类型参数之前发现-
和+
,其中-
表示逆变和+
协变。
这意味着给出了
class Animal
class Dog extends Animal
然后
Function1[Animal, Dog] <: Function1[Dog, Dog]
Function1[Dog, Dog] <: Function1[Dog, Animal]
但
Function1[Dog, Animal] </: Function[Dog, Dog]
Function1[Animal, Animal] </: Function[Animal, Dog]
换句话说,函数承诺不会少,不再需要