2009-06-09 7 views
2

나는 다음과 같은 코드를 테스트 한 내가 (aArgs)이 기능을 BB하는 빈 인수를 전달AS3 ... (rest) 매개 변수

aa: 0 //this is expected. 
bb: 1 //this is not! 

; 길이가 0이면 안 되나요? 함수 bb가 전달 된 aArg를 비어 있지 않거나 null이 아닌 것으로 간주하는 것처럼 보입니다.

여기에 무엇이 누락 되었습니까?

도움을 주시면 감사하겠습니다. 안부 ...

답변

9

bb() 함수로가는 aArgs는 빈 배열이 될 것이지만 배열은 그다지 작지는 않습니다 ... 나는 그 출력이 예상된다고 말할 것입니다.

내가 조금 명확히하고 싶어 : 나는

업데이트 1이 ... 원하는 출력을 얻을 수 있지만 내가 다른 포맷 것이라고 생각하는 방법을 정말 모르겠어요. 가지고있는 것은 기본적으로 다음과 같은 것입니다 :

function aa(...aArgs):void 
{ 
    myArray:Array = aArgs; 
    bb(myArray); 
} 
function bb(...bArgs):void 
{ 
    trace("bb:", bArgs.length); 
} 
aa(); //calling aa without any arguments. 

이 코드를 본다면 bb : 1을 기대할 수 있습니까?

업데이트 2 :

이 스레드 : 그것은 관련이있을 것입니다 것처럼 filling in (...rest) parameters with an array? 보인다. apply() 함수를 사용하여 배열을 매개 변수 목록으로 전달합니다. http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/Function.html#apply()

+0

알 수 있습니다. 감사. aa 함수에서 bb.apply (null, args)를 호출하면이 예제에서 올바르게 작동합니다. (나는 15 명의 담당자가 있다면 당신의 대답에 투표 할 것입니다.) 사실, 저는 변수를 arg로 넘기려고합니다. 예 : function aa (... args) {someVariable = args; } 그리고 나중에 해당 변수를 bb (... args) 함수와 같이 사용하면 bb (someVariable); - 작동하지 않습니다 .. –

+0

여전히 적용과 함께 작동해야합니다. somveVariable은 배열이므로, 배열에서 개별 항목을 전달하려면 apply()가 필요하다는 것을 기억하십시오. –

+0

아니야 .. http://stackoverflow.com/questions/972460/as3-arguments의 스레드를 참조하십시오. 여기에 코드를 추가 할 수 없으므로 새로운 질문을해야합니다. –

2

이것은 완벽하게 이해되며 올바르게 작동합니다. ... rest는 항상 배열을 만듭니다. 전달 된 값이 없으면 길이를 추적하여 볼 때 빈 Array를 만듭니다. 그래서 bb가 ... rest 배열에 하나의 객체를 가지고있는 이유는 빈 배열을 bb에 넘겨주는 것입니다. bb에 의해 생성 된 배열의 첫 번째 위치에 삽입됩니다. 1의 길이.

+0

예 위 내용 모두에 동의합니다. 그러나 그것은 단지 문제의 본질을 묘사하는 것입니다. 우리에게 적절한 해결책을 제공하지는 못했지만, 게다가 .. 게다가; 함수의 오버 플로우와 매개 변수를 그대로 유지해야합니다. (이 코드는 복잡한 클래스의 단순한 버전입니다.) 어쨌든, 저는 여러분 모두의 도움으로 해결책을 찾았습니다.당신은 그것을 여기에서 찾을 수있다 : http://stackoverflow.com/questions/972460/as3-arguments 그것은 매우 애매하고/다른 접근법처럼 보일지 모르지만 그것은 내가 필요한 것일 뿐이다. –

6

이 여전히 관련이 있는지 알고하지 않습니다하지만 당신이 시도 할 수 :

function aa(...aArgs):void { 
    var myArray:Array = aArgs; 
    bb.apply(this, myArray); 
} 
function bb(...bArgs):void { 
    trace("bb:", bArgs.length); 
} 
aa(); //calling aa without any arguments. 

은 기본적으로 Function.apply에 여기 당신의 친구입니다.

+0

감사합니다. 여기에서 질문이 해결되었습니다. http://stackoverflow.com/questions/972460/as3-arguments/972518#972518 –

관련 문제