Sto leggendo Scala in profondità ora. Ecco un estratto dal libro:I tipi di percorso dipendenti dipendono dalle proiezioni?
Tutti i tipi di percorso dipendono dal tipo di proiezioni. Un tipo dipendente dal percorso
foo.Bar
viene modificato comefoo.type#Bar
dal compilatore ...In Scala, tutti i riferimenti di tipo possono essere scritti come progetti contro entità denominate. Il tipo scala.String è una scorciatoia per
scala.type#String
dove il nomescala
si riferisce al pacchettoscala
e il tipoString
è definito dalla classeString
sul pacchetto scala.
Ovviamente, non v'è scala.String
di classe, ma non è riuscito a riprodurre questo con Null
.
scala> type N = scala.type#Null
<console>:7: error: type mismatch;
found : type
required: AnyRef
type N = scala.type#Null
Quindi, le mie domande sono le seguenti. I tipi di percorso dipendenti dipendono dalle proiezioni? È solo la rappresentazione del compilatore interno o può essere espressa in scala di codice?
Ma secondo SLS §3.1 'Un percorso è uno dei seguenti ... p.x dove p è un percorso e x è un membro stabile di p. I membri stabili sono pacchetti o ... Un identificatore stabile è un percorso che termina in un identificatore. 'Scala.Nullo' è un identificatore stabile. Destra? – 4e6
No, tutti gli identificatori stabili sono valori o pacchetti: 'scala.Null' indica un tipo non un valore. 'scala' è un identificatore stabile ma, come hai osservato, essendo un pacchetto piuttosto che un oggetto, il suo comportamento rispetto al tipo singleton che si forma nell'operatore' .type' è diverso dall'esempio 'foo' che ho dato nella mia risposta. –
Oh, ora, finalmente vedo che si tratta di un comportamento '.type'. Ci è voluto così tanto tempo per capirlo. Grazie mille :) – 4e6