Scala in Depth显示以下差异示例。
scala> trait Function[-Arg, +Return] {
| def apply(arg: Arg): Return
| }
defined trait Function
scala> val foo = new Function[Any, String] {
| override def apply(arg: Any): String =
| "Hello. I received " + arg
| }
foo: Function[Any,String] = $anon$1@5db0e244
scala> val bar: Function[String, Any] = foo
bar: Function[String,Any] = $anon$1@5db0e244
我们可以将foo
分配给bar
的原因是什么?我有一个粗略的想法,但我想我会直接问。
答案 0 :(得分:3)
正是因为方差注释使Function[Any, String]
成为Function[String, Any]
的子类型。
协方差注释,+
表示较窄的类型参数产生较窄的构造类型,而逆变注释-
,意味着较宽的类型参数产生较窄的构造类型。