Scala “解释”-&引用;及+&引用;在'trait function 2[-T1,-T2,+;R]中,扩展了AnyRef`
特征签名中输入和返回类型使用“-”和“+”的目的和定义是什么,例如Scala “解释”-&引用;及+&引用;在'trait function 2[-T1,-T2,+;R]中,扩展了AnyRef`,scala,Scala,特征签名中输入和返回类型使用“-”和“+”的目的和定义是什么,例如trait Function2[-T1,-T2,+R]扩展AnyRef 有人能建议在规范中的确切位置来阅读它吗?“-”是逆变的“+”是协变的 你可以在这个博客中阅读子类型 另外,scala的函数式编程课程也谈到了这一点 “-”允许您使用T的子类,因此它对输入是受限的,“+”允许您返回T的超类型,因此它对输出是通用的 class SuperBase class Base extends SuperBase class SubBa
trait Function2[-T1,-T2,+R]扩展AnyRef
有人能建议在规范中的确切位置来阅读它吗?“-”是逆变的“+”是协变的
你可以在这个博客中阅读子类型
另外,scala的函数式编程课程也谈到了这一点
“-”允许您使用T的子类,因此它对输入是受限的,“+”允许您返回T的超类型,因此它对输出是通用的
class SuperBase
class Base extends SuperBase
class SubBase extends Base
val add: Function1[Base, Base] = { base =>
new SubBase //ignore this
}
add(new SubBase) //ok
add(new SuperBase) //compilation fail
val result: SuperBase = add(new SubBase) //ok
val result: SubBase = add(new SubBase) //compilation fail
这些是方差和协方差注释,用于指定多态类型的子类型关系的工作方式。例如,
List[+A]
表示列表的内容是协变的:如果您有一个类型Dog
,它是Animal
的子类型,那么类型List[Dog]
将是List[Animal]
的子类型。在有趣的符号中:如果你有类型A