我在閱讀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