0
我刚开始使用haxe(moving from AS3)
。铸造类型参数必须为动态
我想转换为数组,但它不起作用,即我在尝试编译时遇到了Cast type parameters must be Dynamic
错误。下面是我使用的代码:
var result: Array<String> = cast(["sometext"], Array<String>);
var arr: Array<Int> = new Array<Int>();
arr.push(1);
var vect : Array<Int> = cast(arr, Array<Int>);
var arr1: Array<Int> = [1, 2 ,3];
var vect1 : Array<Int> = cast(arr1, Array<Int>);
var arr2 = [1, 2 ,3];
var vect2 : Array<Int> = cast(arr2, Array<Int>);
这4种类型转换不编译,并给出了同样的错误“铸类型参数必须是动态的”。如果我将类型参数更改为动态,它也不起作用。它失败并出现不同的错误。
有人可以解释为什么这种铸造方式不工作,我如何可以投射到阵列?
其他铸件:
var i: Int = 1;
var j: Int = cast(i, Int);
var str: String = "str";
var str1: String = cast(str, String);
var instance: CastToArrayTest = new CastToArrayTest();
var instance1: CastToArrayTest = cast(instance, CastToArrayTest);
工作就好了。
首先,非常感谢你的答案。 我明白你的观点,但我仍然认为不能像这样做一个安全的演员阵容:var arr1:Array = [1,2,3]; var vect1:Array = cast(arr1,Array );是haxe的缺点。你可以用其他语言,AS3,Typescript等来完成。当你在haxe/openFL中转换一个as3代码时,你通常会按照上述方式转换这些转换,你就会失败。尽管如此,再一次,非常感谢,当我想投射数组时,似乎我必须使用不安全的投射。 –
@CikaRaki我也明白你的观点。我会补充:(a)安全地(在运行时)将'something'投射到'Array '确实不仅需要检查'something'是一个'Array',而且它的所有元素都是类型的'A'; (b)允许类型参数随时变化会导致许多难以调试的问题([如果允许修改本质上是不安全的](https://haxe.org/manual/type-system-variance.html)) ; (b)只要'arr1'类型为'Array',您也不需要对'var vect1 = arr1'(或'var vect1:Array = arr1')进行任何转换或转换。 –