Teraz czytam Scalę. Oto fragment z książki:Czy projekcje typów typów zależą od ścieżki?
Wszystkie typy zależne od ścieżki są projekcjami typu. Typ zależny od ścieżki
foo.Bar
został przepisany jakofoo.type#Bar
przez kompilator ...W Scala wszystkie odwołania do typów można zapisywać jako projekty względem nazwanych elementów. Typ scala.String jest skrótem nazwy
scala.type#String
, gdzie nazwascala
odnosi się do pakietuscala
, a typString
jest zdefiniowany przez klasęString
w pakiecie scala.
Oczywiście, nie ma scala.String
klasy, ale nie udało mi się odtworzyć ten z Null
.
scala> type N = scala.type#Null
<console>:7: error: type mismatch;
found : type
required: AnyRef
type N = scala.type#Null
Moje pytania są następujące. Czy projekcje typów typów zależą od ścieżki? Czy jest to tylko wewnętrzna reprezentacja kompilatora, czy może być wyrażona w kodzie scala?
Ale według SLS §3.1 'Ścieżka jest jedną z następujących ... p.x gdzie p jest ścieżką, a x jest stabilnym elementem p. Stabilne elementy to pakiety lub ... Stabilny identyfikator to ścieżka kończąca się identyfikatorem. "Scala.Null" jest stabilnym identyfikatorem. Dobrze? – 4e6
Nie, wszystkie stabilne identyfikatory są wartościami lub pakietami: 'scala.Null' oznacza typ, a nie wartość. 'scala' jest stabilnym identyfikatorem, ale jak zauważyłeś, będąc pakietem, a nie obiektem, jego zachowanie w typie singleton tworzącym w operatora' .type' różni się od przykładowego 'foo', które dałem w mojej odpowiedzi. –
Och, teraz wreszcie widzę, że chodzi o zachowanie ".type". Tyle czasu zajęło zrozumienie tego. Dziękuję bardzo :) – 4e6