Class hat eine Type Parameter, also, wenn Sie eine Klasse als Argument akzeptieren, gehen, müssen Sie einen Typ-Parameter angeben.
Accept jede Klasse:
function foo(myClassRef:Class<Dynamic>):Void {
var myVar = Type.createInstance(myClassRef, [constructorArg1, constructorArg2....]);
trace(Type.typeof(myVar));
}
Akzeptieren nur "sys.db.Object" Klasse oder Unterklassen:
function foo(myClassRef:Class<sys.db.Object>):Void {
var myVar = Type.createInstance(myClassRef, []);
trace(Type.typeof(myVar));
}
Haxe 3 ermöglicht auch generic functions:
@:generic function foo<T:Dynamic>(t:Class<T>) {
var myVar = new T();
trace(Type.typeof(myVar));
}
Hier Sie deklarieren die Funktion als generisch, was bedeutet, dass für jeden anderen Typparameter eine andere Version existiert Ein der Funktion wird kompiliert. Du akzeptierst Klasse, wobei T der Typparameter ist - in diesem Fall dynamisch, also wird es mit jeder Klasse funktionieren. Schließlich können Sie mit generischen Funktionen new T()
schreiben, was eine natürlichere Syntax zu sein scheint, und auf einigen Plattformen kann es Leistungsvorteile geben.
Ich möchte nur hinzufügen, dass mit Eliminierung von Dead Code auf voll (-dce voll) der Konstruktor der Klasse eliminiert werden würde, wenn es nirgendwo sonst verwendet wird. Um dies zu beheben, sollten wir die Konstruktorsignatur mit @ voranstellen: Metadaten beibehalten, [wie folgt] (https://github.com/HaxeFoundation/haxe/issues/1891). – Veehmot
Ich kann falsch liegen, aber laut der Dokumentation (haxe 3.2.0) ist es 'Type.createInstance (myClassRef, [args]);' Das heißt, kein 'Konstruktor' in den Parametern. – chichilatte
Das war nur ich schreibe versucht einen Satz zu schreiben. Ich hätte auch 'Type.createInstance (myClassRef, [arg1, arg2, arg3])' 'schreiben können. Entschuldigung für die Verwirrung, ich werde die Antwort bearbeiten –