Julia: Unterschied zwischen Type und DataType

8

Für mich scheinen sie gleich zu sein. Da Type vom Typ DataType ist und umgekehrt, wie sind sie nicht gleichwertig? Wann sollte ich einen gegen den anderen benutzen?

%Vor%     
rakesh a 16.02.2017, 20:20
quelle

1 Antwort

6

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 :

%Vor%

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} :

%Vor%

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.

%Vor%

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:

%Vor%

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.

    
Matt B. 16.02.2017, 23:41
quelle

Tags und Links