haxe(moving from AS3)
を使用し始めました。キャストタイプのパラメータは動的である必要があります
私はArrayにキャストしようとしていますが、コンパイルしようとすると、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人のキャストのそれぞれは、コンパイルして、「キャスト型パラメータはダイナミックでなければならない」と同じエラーを与えていません。以下は、私が使用するコードです。私がタイプパラメータをダイナミックに変更すると、どちらも機能しません。別のエラーで失敗します。
誰かがこのキャスティングの仕組みがうまくいかず、どうしてArrayにキャストできるのか説明できますか?
その他のキャスト:
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 =キャスト(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')にはキャストや変換は一切必要ありません。 –