2011-02-02 12 views
8

map()関数をVectorクラスで動作させることができません。ベクトルマップ()は、アクションスクリプト3でどのように動作しますか?

結果は常にnullに戻ります - addFive関数によって返された値を持つ新しいベクトルが返されるはずです(この例は明らかに私の実際の使用法ではありません)。

アレイのバージョンが期待通りに機能します。

ベクターを使用するためにmap()を取得する運があった人はいますか?

public function test_vector_map():void { 
     var v1:Vector.<uint> = new <uint>[1,2,3]; 
     trace(v1); // traces 1,2,3 

     var v2:Vector.<uint> = v1.map(addFive); 
     trace(v2); // traces null 
    }    

    protected function addFive(item:uint, index:int, vector:Vector.<uint>):uint 
    { 
     return item+5; 
    } 

    public function test_array_map():void { 
     var v1:Array = [1,2,3]; 
     trace(v1); // traces 1,2,3 
     var v2:Array = v1.map(addSix); 
     trace(v2); // traces 7,8,9 
    }    

    protected function addSix(item:uint, index:int, array:Array):uint 
    { 
     return item+6; 
    } 
+0

確認済み:v1ベクターはmap()関数によって変更されていません。 – Stray

+0

確認済み:v1またはテストクラスそのものを 'this'オブジェクト(関数内にこの参照がある場合に使用する2番目のオプションパラメータ)として渡しても違いはありません。 – Stray

+0

確認済み:addFive関数をマップを実行するコードに対してローカルにしても、違いはありません。 – Stray

答えて

8

これはactionscript/flash playerのバグです。 Adobeが内部的に修正したようだが、Flash Player 10.1では修正がリリースされていない。

を参照してください:ここで見つける私たちのバグの根本的な原因である https://bugzilla.mozilla.org/show_bug.cgi?id=513095

:あなたは今のために何ができる

https://bugzilla.mozilla.org/show_bug.cgi?id=507501

最善のことは地図を

を必要なときに配列を使用してに固執されます
+2

私にはそれを見つけてくれてありがとう - 少なくとも私は狂っていません。 – Stray

3

奇妙な...あなたの確認が表示されています。

var v1:Vector.<uint> = new <uint>[1,2,3]; 
trace(v1); // traces 1,2,3 

var v2:Vector.<uint> = v1.slice(); 
v2.forEach(addFive); 
trace(v2); // traces 6,7,8 
+0

ありがとうございました - 私は一見有益なマップ/フィルターなどの機能をもっと活用しようとしていました - 私は通常これらのもの(forEachより速い)のfor(var i ...)ループを使用します。ハンド。私のためにそれを確認するための乾杯。 – Stray