2011-02-02 8 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 Vector는 map() 함수에 의해 변경되지 않습니다. – Stray

+0

확인 됨 : v1 또는 테스트 클래스 자체를 'this'객체 (함수에이 참조가있는 경우 사용하기위한 두 번째 선택적 매개 변수)로 전달하면 아무런 차이가 없습니다. – Stray

+0

확인 :지도를 실행하는 코드의 로컬 addFive 함수를 변경해도 아무런 차이가 없습니다. – Stray

답변

8

이것은 액션 스크립트/플래시 플레이어 버그입니다. 어도비는 내부적으로 수정 한 것처럼 보이지만 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

감사합니다 - 겉으로보기에 유용한지도/필터 등의 기능을 더 많이 사용하려고했습니다. 일반적으로 for (forEach보다 빠릅니다)에 대해 for (var i ...) 루프를 사용하여 손. 나를 위해 그것을 확인을위한 건배. – Stray

관련 문제