AS3 ... (hvile) para

stemmer
2

Jeg har testet følgende kode:

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

Utgangen er:

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

Når jeg tom passere argumenter (aArgs) til BB-funksjon; bør det ikke komme tilbake 0 lengden? Virker som funksjon bb er å behandle de overførte aArgs som ikke er tom / ikke-null ..

Hva er det jeg mangler her?

Alle hjelpe er verdsatt. hilsen ..

Publisert på 09/06/2009 klokken 17:38
kilden bruker
På andre språk...                            


3 svar

stemmer
9

Det ser ut som aArgs går til bb () funksjon ville være en tom array, men en rekke ikke desto mindre ... Jeg vil si at produksjonen er å være forventet. Jeg er ikke helt sikker på om hvordan jeg ville formatere den på en annen måte om å få ønsket effekt ...

Update 1:

Jeg ønsket å avklare litt. Hva du har er i utgangspunktet det samme som:

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

Hvis du så denne koden, ville du forvente bb: 1 ja?

Oppdatering 2:

Denne tråd: utfylling (... hvile) parametere med en matrise? ser ut som om det ville være relevant. Den bruker det gjelder () -funksjonen til å passere i en matrise som en parameterliste. http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/Function.html#apply ()

Svarte 09/06/2009 kl. 17:40
kilden bruker

stemmer
2

Dette gir mening, og fungerer som den skal. ... resten skaper alltid en Array, hvis det er ingen verdier vedtatt i det skaper en tom Array, som du ser ved å spore dens lengde. Så grunnen til at bb har ett objekt i sin ... resten matrise er at du passerer den tomme matrisen til bb som en verdi, som blir satt inn i den første posisjonen til Array generere ved bb ... resten, gir det en lengden av en.

Svarte 09/06/2009 kl. 22:36
kilden bruker

stemmer
6

Vet ikke om dette er fortsatt relevant, men du kan prøve dette:

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.

I utgangspunktet Function.apply er din venn her.

Svarte 17/06/2009 kl. 14:46
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more