Vectorの型としてObjectまたは*を使用すると、汎用の機能(JavaのListなど)は提供されません。目撃者:汎用リストユーティリティでベクトル(AS3)を使用できますか?
public static function someGenericVectorUtil (value:Vector.<*>) :void {
// do stuff to/with the Vector
}
var someVector:Vector.<Number>;
someGenericVectorUtil(someVector); // compile-time implicit coercion error
おそらく、私たちはユーティリティメソッドを再定義して、配列を受け入れることにします。しかし、ベクターは、配列へのユーティリティに入るに変換する簡単な方法は、また戻って、その後でそれらをパックする簡単な方法は、このようなコードで、その結果、ありません:回答
public static function someGenericArrayUtil (value:Array) :void {
// do stuff to/with the formerly-known-as-Vector
}
var someVector:Vector.<Number>;
var tempArray:Array = new Array(someVector.length);
for (var i:uint=0; i<someVector.length; i++) {
tempArray[i] = someVector[i];
}
someGenericVectorUtil(tempArray);
someVector = Vector.<Number>([tempArray]);
言うまでもないが、それはかなり恐ろしいです。さて、Vector-Array-Vectorナンセンスをユーティリティに移してみましょう:
public static function vectorToArray (Vector.<*>) :Array {
// oh wait....that Vector.<*> param is useless,
// as demonstrated earlier.
}
この混乱をまっすぐにする方法はありますか?あるいは、汎用ユーティリティで実行する必要があると思ったら、ベクターの使用をやめるべきですか? (明らかに、多くのオプションもありません...)
注:ベクトルは、数値型(数値、整数、単位)を扱うときに効果があります。それ以外の場合は実際には遅いです。 – Marty
ほとんどの場合、それほど遅いわけではありませんが、コードの可読性には間違いなく優れたインターフェースを提供します。また、今後のバージョンのフラッシュでは、型指定されたコンテナにこのような最適化を書き込むことができるため、他の型のVectorsを高速化する可能性があります。 –