scalac -explaintypes: Was bedeutet "notype: X?"?

8

Wenn ich "scalac -explaintypes" benutze und etwas wie:

sehe %Vor%

Was bedeutet die Zeile "& lt; notype & gt; & lt ;: ThingManager?" gemein?

Bedeutet es, dass "Kein Typ dem ThingManager möglicherweise entsprechen kann"?

    
Sebastien Diot 14.08.2011, 09:52
quelle

1 Antwort

6

-explain-types zeichnet alle Aufrufe von Subtyping-Prüfungen nach. Einrückung wird verwendet, um rekursive Aufrufe anzuzeigen.

Hier ist ein kleines Beispiel:

%Vor%

Es gibt drei Rekursionsebenen. Der erste Aufruf überprüft, ob UniqueConstantType(0) <:< UniqueTypeRef(String) . Die LHS ist ein Singletontyp für die wörtliche Ganzzahl. Der Test wird fortgesetzt durch Berücksichtigung des zugrunde liegenden Typs dieses Singleton-Typs UniqueTypeRef(Int) <:< UniqueTypeRef(String) .

Die Konformitätsprüfung erfolgt dann Suchen für den Obertyp von Int der Klasse String (das Basistyp ) und dann prüfen, ob dies mit String übereinstimmt. Es gibt keinen solchen Supertyp, daher wird NoType zurückgegeben. Der rekursive Aufruf von <:< führt zur Ausgabe <notype> <: java.lang.String .

%Vor%

NoType ist ein Null-Objekt. (Der Compiler verwendet dieses Muster auch für NoSymbol , NoPosition ).

    
retronym 14.08.2011, 21:40
quelle

Tags und Links