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:
Aber das ist möglich:
%Vor% 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
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
Nothing
ist per Definition ein Subtyp von AnyRef with AnyVal
, also diese Deklarationstypprüfung.
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".