AS3 argumenter

stemmer
2

Hvorfor tror du koden under virker ikke? Hva ville du forandre / legge til å gjøre det?

Alle hjelpe er verdsatt ..

function TraceIt(message:String, num:int)
{
    trace(message, num);
}

function aa(f:Function, ...args):void
{
    bb(f, args);
}

aa(TraceIt, test, 1);

var func:Function = null;
var argum:Array = null;

function bb(f:Function, ...args):void
{
    func = f;
    argum = args;
    exec();
}

function exec()
{
    func.apply(null, argum);
}

Jeg får en ArgumentError (Feil # 1063):

Argument count mismatch on test_fla::MainTimeline/TraceIt(). Expected 2, got 1.

..så, den passerte parameter (argum) unnlater å tilveiebringe alle passert argumenter ..

..Please holde funksjonsstruktur (trafikk) intakt .. Jeg trenger en løsning ved hjelp av de samme funksjoner i samme rekkefølge .. I har til å passere argument til en variabel og bruke dem i exec () metoden ovenfor ..

hilsen

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


3 svar

stemmer
1

Når TraceIt () til slutt blir kalt, er det som kalles med en Array parameter, ikke en streng og int parametere.

Du kan endre TraceIt () til:

function TraceIt(args:Array)
{
     trace(args[0], args[1]);
}

Eller du kan endre exec () til:

function exec()
{
     func.apply(null, argum[0].toString().split(","));
}

... slik det ser ut når du passerer "test", en, ender du opp med rekke som første verdien er "test, en". Denne løsningen fungerer ikke utover det trivielle tilfellet, skjønt.

Svarte 09/06/2009 kl. 21:08
kilden bruker

stemmer
1

Endre bb funksjon for å se slik ut:

function bb(f:Function, args:Array):void
{
    func = f;
    argum = args;
    exec();
}

Som du har det nå, aksepterer det et variabelt antall argumenter, men du passerer i en matrise (av argumentene) fra aa.

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

stemmer
7

Ok, her er løsningen .. etter å bryte hodet mitt:)

    function TraceIt(message:String, num:int)
    {
        trace(message, num);
    }

    function aa(f:Function=null, ...args):void
    {
        var newArgs:Array = args as Array;
        newArgs.unshift(f);
        bb.apply(null, newArgs);
    }

    aa(TraceIt, "test", 1);

    var func:Function = null;
    var argum:*;

    function bb(f:Function=null, ...args):void
    {
        func = f;
        argum = args as Array;
        exec();
    }

    function exec():void
    {
        if (func == null) { return; }
        func.apply(this, argum);
    }

På denne måten kan du passere argumenter som variabler til en annen funksjon og kjøre dem ..

Takk til alle som tar seg tid til å hjelpe ...

Svarte 09/06/2009 kl. 23:07
kilden bruker

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