Scala中参数类型的方差是什么?

时间:2015-01-28 21:39:31

标签: scala variance

我已经读过Scala的协变函数返回类型。 但它的论证类型呢? FunctionX(T1,...,R)与这一切有什么关系?

1 个答案:

答案 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]

换句话说,函数承诺不会少,不再需要