Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 为什么`trait X{def append[-]():Unit}`编译?_Scala_Type Systems - Fatal编程技术网

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[-] {}

你有没有检查过协方差符号以及它们是如何使用的?所以这里只是一个普通的类型名称,就像
类-
,对吗?是的,在标识内部,它与任何其他类型都没有区别。