Scala 中参数类型的差异是什么?
What is the variance of argument types in Scala?
我读过有关 Scala 的函数协变return 类型。
但是它的参数类型呢? FunctionX(T1,...,R)
与这一切有什么关系?
如果您查看任何 FunctionX
class 的文档,您会发现 return 类型是协变的,而参数类型是逆变的。例如,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]
换句话说,函数承诺不少,要求也不少
我读过有关 Scala 的函数协变return 类型。
但是它的参数类型呢? FunctionX(T1,...,R)
与这一切有什么关系?
如果您查看任何 FunctionX
class 的文档,您会发现 return 类型是协变的,而参数类型是逆变的。例如,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]
换句话说,函数承诺不少,要求也不少