我正在尝试传递一个Class引用并在函数中实例化它.这不起作用:
function foo(myClassRef:Class):Void {
var myVar = new myClassRef();
}
foo(MyClass);
Run Code Online (Sandbox Code Playgroud)
它给出了Unexpected (
.
在Haxe 3中这可能吗?
Jas*_*eil 13
类具有类型参数,因此如果您要接受类作为参数,则需要指定类型参数.
接受任何课程:
function foo(myClassRef:Class<Dynamic>):Void {
var myVar = Type.createInstance( myClassRef, [constructorArg1, constructorArg2....] );
trace( Type.typeof(myVar) );
}
Run Code Online (Sandbox Code Playgroud)
仅接受"sys.db.Object"类或子类:
function foo(myClassRef:Class<sys.db.Object>):Void {
var myVar = Type.createInstance( myClassRef, [] );
trace( Type.typeof(myVar) );
}
Run Code Online (Sandbox Code Playgroud)
Haxe 3还允许通用功能:
@:generic function foo<T:Dynamic>(t:Class<T>) {
var myVar = new T();
trace( Type.typeof(myVar) );
}
Run Code Online (Sandbox Code Playgroud)
在这里,您声明函数是通用的,这意味着对于每个不同的类型参数,将编译该函数的不同版本.你接受Class,其中T是类型参数 - 在这种情况下是动态的,所以它适用于任何类.最后,使用泛型函数让你编写new T()
,这似乎是一种更自然的语法,并且在某些平台上可能会有性能优势.