Type
und DataType
sind beide beide Typen. Und der Typ der meisten Typen ist, wie du herausgefunden hast, DataType
. In diesem Fall ist DataType
ein Subtyp des abstrakten Type
:
Das bedeutet, dass alles, was isa
DataType
ist, auch ein Type
ist - so viele Typen in Julia sind isa
beide. Es gibt auch andere Subtypen von Type
, einschließlich Union
s und TypeConstructor
s. Das bedeutet, dass alle Typen in Julia vom Typ Type
sind, aber auch einfache Dinge wie Vector
haben nicht den Typ DataType
.
Type
ist speziell. Wie Sie oben sehen, ist es parametrisch. Auf diese Weise können Sie den Typ eines bestimmten Typs genau angeben. Also während jeder einzelne Typ in Julia isa
Type
, nur Int
isa
Type{Int}
:
Diese Fähigkeit ist speziell und einzigartig für Type
und es ist wichtig, dass der Versand für einen bestimmten Typ angegeben werden kann. Beispielsweise können Sie mit vielen Funktionen einen Typ als erstes Argument angeben.
Es ist erwähnenswert, dass Type{Number}
ist nur der Typ von Number
und nicht der Typ von Int
, obwohl Int <: Number
! Dies ist parametrische Invarianz. Um alle Subtypen eines bestimmten abstrakten Typs zuzulassen, können Sie einen Funktionsparameter verwenden:
Die Fähigkeit, den fraglichen spezifischen Typ als Funktionsparameter zu erfassen, ist leistungsstark und wird häufig verwendet. Beachten Sie, dass ich nicht einmal einen Argumentnamen angeben musste - das einzige, was in diesem Fall zählt, ist der Parameter in Type{}
.
Das war also eine ziemlich lange Erklärung für eine wirklich kurze Antwort: Normalerweise möchten Sie DataType
nicht verwenden, da es nicht alle Arten von Julia abdeckt. Stattdessen sollten Sie Type
verwenden, um den Typ eines oder aller Typen zu beschreiben. Verwenden Sie Type{T}
, wenn Sie insbesondere den Typ von T
beschreiben möchten.
Tags und Links types julia-lang