2009-06-09 39 views
2

我已經測試了以下的代碼:... AS3(rest)參數

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

的輸出是:

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

當我通過空參數(aArgs)至BB功能; 不應該返回0長度嗎?看起來像函數bb處理傳遞的aArgs爲非空/非空...

我在這裏錯過了什麼?

任何幫助表示讚賞。 關注..

回答

9

它看起來像aArgs去bb()函數將是一個空的數組,但一個數組沒有少...我會說,輸出是預期的。我真的不知道我雖然會怎樣不同的方式格式化它雖然以獲得所需的輸出...

更新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個代表,我會投票答覆你的答案) 但實際上,我試圖將...... args傳遞給一個變量。 如: 函數aa(... args){someVariable = args; } 和如果我稍後在bb(... args)函數中使用該變量,如:bb(someVariable); - 它不會工作.. – 2009-06-09 18:01:20

+0

這應該仍然適用於申請。只要記住somveVariable是一個數組,所以你需要apply()來傳遞數組中的單個項。 – 2009-06-09 18:35:51

+0

不,它不.. 請參閱線程在http://stackoverflow.com/questions/972460/as3-arguments 我不能在這裏添加代碼,所以我不得不問一個新的問題.. – 2009-06-09 20:58:08

2

這非常合理,並且正常工作。 ...休息總是創建一個數組,如果沒有傳入任何值,將創建一個空數組,如通過追蹤其長度所看到的。所以bb在其... rest數組中有一個對象的原因是你將空數組作爲一個值傳遞給bb,它被插入到由bb's ... rest生成的數組的第一個位置,給它一個一個的長度。

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這裏是你的朋友。