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
差异注释,保持跟踪”;“积极的”;及;“否定”;Scala编译器的位置_Scala_Compiler Construction_Type Systems_Variance - Fatal编程技术网

差异注释,保持跟踪”;“积极的”;及;“否定”;Scala编译器的位置

差异注释,保持跟踪”;“积极的”;及;“否定”;Scala编译器的位置,scala,compiler-construction,type-systems,variance,Scala,Compiler Construction,Type Systems,Variance,在Scala第436页的编程中,作者给出了一个编译器检查每个类型参数是否仅用于适当分类的位置的示例 abstract class Cat[-T, +U] { def meow[W^-](volume: T^-, listener: Cat[U^+, T^-]^-) : Cat[Cat[U^+, T^-]^-, U^+]^+ } 这个例子的结果如何?为什么W和第一个字母得不到负号?该算法实际上是如何工作的? 第1版19.4 “相对于方法外部的位置,方法值参数位置被分类为翻转分类。” 除方法值

在Scala第436页的编程中,作者给出了一个编译器检查每个类型参数是否仅用于适当分类的位置的示例

abstract class Cat[-T, +U] {
  def meow[W^-](volume: T^-, listener: Cat[U^+, T^-]^-) : Cat[Cat[U^+, T^-]^-, U^+]^+
}
这个例子的结果如何?为什么W和第一个字母得不到负号?该算法实际上是如何工作的?

第1版19.4

“相对于方法外部的位置,方法值参数位置被分类为翻转分类。”

除方法值参数位置外,当前分类也会在方法的类型参数上翻转

翻转在本例中表示“从正翻转”,因此为负

对于奖励积分,生成一个演示此模型物理解释的LOLcats

其他问答:

Okay let's look at the 3rd value parameter "listener".

It has a annotation of: Cat[U^+, T^-]^-.

Why does U have +? Why does T have -? Why does the whole thing have a -?
方法param是一个逆变位置,因此是最外面(最右边)的减号

Cat的类型参数为[-T,+U],因此在该翻转位置,[+,-]。(应用的实际参数[U,T]不相关)它进行检查,因为实际参数分别是协变和逆变

更多问题:

Could you kindly describe on SO why the return value type has the following annotation
for the sake of completeness...

Also could you be so kind as to give an example of the following rule?

A classification is sometimes flipped at the type argument position of a type...
这第二个附加问题与您之前的第一个附加问题相同。两个Cat[+,-]表示翻转,结果类型Cat[-,+]表示不翻转

此线程为参数(传入的内容)和结果(传出的内容)的变化提供了进一步的动机:


我发现Java讨论和示例(PECS或Naftalin和Wadler)对于Scala提供的内容非常有用。

为什么结果类型Cat[-,+]+具有正面的总体注释?我阅读了您的上一个答案。我认为文本“Scala中的编程”没有为结果类型的方差注释提供任何规则。所以我不明白为什么它是积极的。文本没有说,“在结果类型参数处也翻转它。”所以你是说作者任意决定将结果类型注释保留为所有结果的正值??这有点武断..我的解释是返回类型没有特殊规则,所以“快车道”第3段中的句子适用:“声明类的顶级位置被归类为肯定。”@eold类似于规范中的语言,