In Programmierung in Scala Seite 436 gibt der Autor ein Beispiel des Compilers, der prüft, dass jeder Typparameter nur in Positionen verwendet wird, die entsprechend klassifiziert werden.
%Vor%Wie funktioniert das Beispiel? Warum bekommen W und das erste T ein negatives Vorzeichen? Wie funktioniert der Algorithmus tatsächlich?
19.4 in 1. Ausgabe
"Methodenwert-Parameterpositionen werden in die geflippte Klassifizierung relativ zu Positionen außerhalb der Methode klassifiziert."
"Neben den Parameterpositionen der Methodenwerte wird die aktuelle Klassifizierung auch mit den Typparametern der Methoden gekippt."
Gekippt bedeutet in diesem Fall "umgedreht von positiv", also negativ.
Erzeugen Sie für Bonuspunkte ein LOLcats, das eine physikalische Interpretation dieses Modells darstellt.
Zusätzliches Q & A:
%Vor%Die Methode param ist eine kontravariante Position, also das äußerste (am weitesten rechts liegende) Minus.
Die Typparameter für Cat sind [-T, + U], also in dieser umgedrehten Position [+, -]. (Die tatsächlichen Parameter, die angewendet werden, [U, T], sind nicht relevant.) Sie prüft, ob die tatsächlichen Parameter co- bzw. kontravariant sind.
Weitere Fragen:
%Vor%Diese zweite zusätzliche Frage ist dieselbe wie Ihre vorherige erste zusätzliche Frage. Die beiden Cat [+, -] veranschaulichen das Spiegeln und der Ergebnistyp Cat [-, +] zeigt das Nicht-Spiegeln an.
Dieser Thread bietet eine weitere Motivation für die Varianz von Params (Dinge, die Sie weitergeben) und Ergebnissen (Dinge, die Sie herausbringen):
Ich fand die Java-Diskussion und Beispiele (PECS oder Naftalin und Wadler) nützlichen Hintergrund für das, was Scala bietet.
Tags und Links scala compiler-construction type-systems variance