簡體   English   中英

A#B在scala中是什么意思

[英]what does A#B mean in scala

我試圖理解以下代碼。 但我不知道R#X是什么意思。 有人可以幫我嗎?

 // define the abstract types and bounds
 trait Recurse {
    type Next <: Recurse
// this is the recursive function definition
    type X[R <: Recurse] <: Int
 }
// implementation
 trait RecurseA extends Recurse {
    type Next = RecurseA
  // this is the implementation
    type X[R <: Recurse] = R#X[R#Next]
 }
object Recurse {
  // infinite loop
  type C = RecurseA#X[RecurseA]
}

您可以從類的現有實例獲取類型:

class C {
  type someType = Int
}
val c = new C
type t = c.someType

或者可以在不實例化對象的情況下直接尋址該類型: C#someType這種形式對於沒有空間創建中間變量的類型表達式非常有用。


添加了一些評論中建議的澄清。

免責聲明 :我對Scala的類型系統如何工作只有部分了解。 我曾嘗試閱讀過幾次文檔,但只能從中提取一些零碎的知識。 但是我在scala方面擁有豐富的經驗,並且可以很好地預測編譯器在個別情況下的行為。

#稱為類型投影和類型投影補充了通過進行普通的分層類型訪問. 在每個類型表達式中,scala都隱式使用兩者。

scala參考提供了此類不可見轉換的示例:

t                        ə.type#t
Int                      scala.type#Int
scala.Int                scala.type#Int
data.maintable.Node      data.maintable.type#Node

如使用所見,類型投影的所有瑣碎用法實際上都適用於類型(即以.type返回),而不適用於對象。 主要的實際區別(我對定義不好)是對象類型就像對象本身一樣短暫。 在諸如抽象類類型的繼承之類的適當情況下,可以更改其類型。 對比類型的類型(類型投影的定義)與太陽一樣穩定。 Scala中的類型(不要將它們與類混用)不是一等公民,並且不能被進一步覆蓋。

有許多適合放置類型表達式的地方。 在某些地方,僅允許使用穩定類型。 因此,基本上,對於類型而言,類型投影更恆定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM