私は今Scalaを深く読んでいます。本からの抜粋は次のとおりです。
すべてのパス依存型は型射影です。パス依存の型は、コンパイラによって
foo.Bar
書き換えられます...foo.type#Bar
Scala では、すべての型参照は、名前付きエンティティに対するプロジェクトとして記述できます。タイプ scala.String は
scala.type#String
、名前scala
がパッケージを参照する場所の省略形でscala
あり、タイプはscala パッケージのクラスString
によって定義されます。String
明らかに、scala.String
クラスはありませんが、これを で再現できませんでしたNull
。
scala> type N = scala.type#Null
<console>:7: error: type mismatch;
found : type
required: AnyRef
type N = scala.type#Null
それで、私の質問は次のとおりです。パス依存型は射影型ですか? 内部コンパイラ表現だけですか、それともscalaコードで表現できますか?