Сейчас я внимательно изучаю Scala. Вот выдержка из книги:
Все типы, зависящие от пути, являются проекциями типов. Зависящий от пути тип
foo.Bar
переписан. какfoo.type#Bar
компилятором...В Scala все ссылки на типы могут быть записаны как проекты для именованных сущностей. Тип scala.String является сокращением для
scala.type#String
, где имяscala
относится к пакетуscala
, а типString
определяется классомString
в пакете scala.
Очевидно, что класса scala.String
не существует, но мне не удалось воспроизвести это с помощью Null
.
scala> type N = scala.type#Null
<console>:7: error: type mismatch;
found : type
required: AnyRef
type N = scala.type#Null
Итак, мои вопросы таковы. Являются ли зависимые от пути типы проекциями типов? Это просто внутреннее представление компилятора или его можно выразить в коде Scala?