Warum ist es möglich, Klassen in einem Typfeld zu mischen?

8

Warum kann ich sagen, dass ein Typfeld den Typ einer Klasse hat, in die eine andere Klasse gemischt ist (wenn nur Merkmale in einer Klasse gemischt werden können)?

Beispiel:

%Vor%

Mischen in B bis A ist nicht erlaubt:

%Vor%

Aber das ist möglich:

%Vor%     
John Threepwood 01.07.2012, 10:06
quelle

2 Antworten

6

Es gibt einen Unterschied zwischen der Mixin-Instanziierung und der Definition des Verbindungstyps. Zuerst existiert der Typ A with B und ist genau der Typ B , leider ist es in scala vollkommen legal zu schreiben

%Vor%

wie ist

%Vor%

wie es genau den gleichen Typ beschreibt. Sie führen nur Einschränkungen in den Typ des Werts ein, den Sie einer Variablen dieses Typs zuweisen können. Diese Einschränkungen gelten natürlich immer in diesem Fall.

Außerdem muss man sich im Klaren sein, dass Scala nicht unbedingt einen Typ braucht, um bewohnt zu sein - d. h. der untere Typ Nothing wird möglicherweise überhaupt nicht instanziiert. Aber da Nothing ein Subtyp jedes Typs ist, der in Scala ausgedrückt werden kann, ist es sogar zulässig, einen Ausdruck wie

zu schreiben %Vor%

Nothing ist per Definition ein Subtyp von AnyRef with AnyVal , also diese Deklarationstypprüfung.

    
Moritz 01.07.2012 12:55
quelle
3

Dies wird zusammengesetzter Typ genannt und hat nichts mit Eigenschaften zu tun. Es erlaubt Ihnen auszudrücken, dass ein Typ ein Untertyp von mehreren anderen Typen ist.

Weitere Informationen dazu, wo sie auftreten können, finden Sie in der Scala-Tag-Info im Abschnitt "type handling".

    
sschaef 01.07.2012 10:32
quelle

Tags und Links