“-”和“+”用于特征签名中的输入和返回类型如trait Function2[-T1, -T2, +R] extends AnyRef
的目的和定义是什么?
有人可以在规范中建议确切的位置来阅读它吗?
最佳答案
这些是方差和协方差注释,用于指定子类型关系如何用于多态类型。例如 List[+A]
表示列表的内容是协变的:如果你有一个类型 Dog
这是 Animal
的子类型然后是类型 List[Dog]
将是 List[Animal]
的子类型.在有趣的符号中:如果您有类型 A<:B
并且您已经定义了一个类型 X[+T]
具有协变类型参数 T
然后 X[A]<:X[B]
. “-”用于逆变,我发现很难举一个例子来说明它的用法:一般来说,如果 A<:B
你有一个类型 X[-T]
然后 X[B] <: X[A]
.你可能想看看 coursera 的编程语言类(class),我认为它解释了这一点,以及为什么函数的参数是逆变的,结果是协变的。
关于scala - "-"中的 "+"和 `trait Function2[-T1, -T2, +R] extends AnyRef` 的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25277963/