私はScalaを今深く読んでいます。この本からの抜粋は次のとおりです。パスに依存するタイプの投影法はありますか?
すべてのパスに依存する型は型投影です。
foo.Bar
は、コンパイラによってfoo.type#Bar
として と書き直されます。すべての型参照は、名前付きエンティティに対するプロジェクトとして記述することができます。 scala.Stringは
scala.type#String
の略語であり、scala
という名前はパッケージscala
を指し、String
の型はscalaパッケージのString
クラスで定義されています。
明らかに、scala.String
クラスはありませんが、Null
でこれを再現できませんでした。
scala> type N = scala.type#Null
<console>:7: error: type mismatch;
found : type
required: AnyRef
type N = scala.type#Null
私の質問は次のとおりです。パスに依存する型は投影法ですか?それはちょうど内部のコンパイラ表現か、またはスカラコードで表現することができますか?
しかし、SLS§3.1によると、パスは以下のうちの一つです... p.xここで、pはパス、xはpの安定メンバーです。安定したメンバは パッケージです...安定した識別子は識別子で終わるパスです。 '' scala.Null'は安定した識別子です。右? – 4e6
いいえ、すべての安定した識別子は値またはパッケージです: 'scala.Null'はタイプではなく値を指定します。 'scala'は安定した識別子ですが、あなたが観察したように、オブジェクトではなくパッケージであるため、演算子' .type'でのシングルトン型の振る舞いは、私が答えた 'foo'の例とは異なります。 –
ああ、今、私はそれが '.type'の振る舞いのすべてだと思っています。それを理解するのに時間がかかりました。ありがとうございます:) – 4e6