Scala 为什么`trait X{def append[-]():Unit}`编译?
在这个答案的底部,有一些代码看起来很奇怪:Scala 为什么`trait X{def append[-]():Unit}`编译?,scala,type-systems,Scala,Type Systems,在这个答案的底部,有一些代码看起来很奇怪: trait X { def append[-](): Unit } 为什么可以编译?我的意思是,[-]是奇怪的它是奇怪的,但在本文中,-是类型参数的可接受标识符。下面是一个较长的示例: class Y { def identity[-](x: -): - = x } (new Y).identity(5) // returns 5 [-]中的-这里是一个普通的类型名,就像下面代码中的类名-: class - 请注意,由于方法的类型参数
trait X {
def append[-](): Unit
}
为什么可以编译?我的意思是,
[-]
是奇怪的它是奇怪的,但在本文中,-
是类型参数的可接受标识符。下面是一个较长的示例:
class Y {
def identity[-](x: -): - = x
}
(new Y).identity(5) // returns 5
[-]
中的-
这里是一个普通的类型名,就像下面代码中的类名-
:
class -
请注意,由于方法的类型参数不能标记为逆变,编译器不会将-
解释为指示逆变。另一方面,这不会分析:
class Z[-] {}
你有没有检查过协方差符号以及它们是如何使用的?所以这里只是一个普通的类型名称,就像
类-
,对吗?是的,在标识内部,它与任何其他类型都没有区别。