我在阅读Scala中的编程,我想清除一些关于编译器推断位置是否定的,中性的或肯定的规则以及确切定义为位置的规则。斯卡拉的位置变化
我知道这个问题已经在这里问了很多,但是阅读这些答案让我更困惑。
因此,从书中的例子,并改变它有点让我可以更容易地表达我的问题。
abstract class Cat[-T, +U] {
def meow[W](par1: T, par2: Cat[U,T], par3: Double): Cat[Cat[U, T], U]
}
所以问题是:
书中最初指定的位置是一种类型的参数可以被使用的码内的每个点(即到处T和U可以是),后来指定所有值参数都是位置,这是否意味着我的示例中的
par3
是一个位置?par1
的T
是负的位置,因为在外部‘范围’一切为正,内部方法值参数的位置的符号的改变和取范围外的相对值。同样的推理par2
的Cat[U,T]
作为一个整体的立场是否定的。我对这些吗?U
和T
里面par2
Cat[U,T]
分别是正数和负数。发生这种情况的原因是因为前一个项目符号中使用的规则?在这本书中还有另外一个规定说,位置标记牌翻转也发生在情况:
类型的类型参数,如
C[Arg]
的Arg
,当C
相应类型的参数有内部型参数与逆变定义即我的理解是指如下定义的的情况下
C
class C[-T]
那么,如果这个工程,我明白不应该在前面的子弹的情况下,这一规则也同样适用,因此具有
par2
的Cat[U,T]
有U
的位置翻转(再次),因为在Cat
类定义的第一类参数是用反变量定义的?
现在到返回类型
Cat[Cat[U, T], U]
作为一个整体是积极的,因为没有规则或任何要说它改变的迹象。与最右边的U相同的逻辑,因为Cat与第二个类型参数是协变的。内部
Cat[U, T]
由于子弹4而具有负位置。 正常情况下,它通过继承外部范围标志而具有+,但由于子弹4而发生翻转。和
T
里面的Cat
里面的返回类型分别有+和 - 符号的规则是什么? “类型嵌套”是否对标志有任何作用?
请纠正我在哪里我错了。
树中的根不应该是Cat [-T,+ U]?你的意思是,而不是事件的权利? – user183833
@ user183833是的,谢谢。请参阅图片后面的段落 – Odomontois