2009-06-09 10 views
2

なぜ以下のコードが機能しないと思いますか? 変更/追加して機能させるにはどうすればよいですか?AS3引数

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

..so、渡されたパラメータ(argum)はすべて渡された引数を提供するために失敗します。すべてのヘルプは高く評価され

..

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); 
} 

Iと、ArgumentError(エラー#1063)を取得します..

..関数の構造体(トラフィック)はそのままにしてください。同じ関数を同じ順序で使用する必要があります。argsを変数に渡してexec()で使用する必要があります。

よろしく

+0

あなたはどんなエラーが出ていますか? – CookieOfFortune

+0

これを上記の投稿に追加しました。ありがとう.. –

答えて

7

[OK]を、ここでのソリューションは、私の頭を壊した後..です:)

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); 
    } 

この方法で、あなたは...誰に

感謝を別の関数に変数として引数を渡すと、それらを実行することができます助けに時間をかけて...

1

TraceIt()が最終的に呼び出されるとき、それは1つのアレイパラメータではなく、文字列とint型のパラメータで呼び出されています..上記の方法

あなたはTraceIt()への変更ができます

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

それともあなたがする)(幹部を変更することができます:

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

...あなたは "テスト" を渡すときに表示されるように、1、最初の値が "test、1"の配列になります。しかし、この解決法は簡単な場合を超えては機能しません。

+0

ありがとうございますが、これは実際のコードの非常に単純なバージョンです。私はTraceItが渡された関数を表していることを意味しています...それはいつも異なっていることを意味します。 –

1
このように見えるようにあなたのBBの機能を変更し

:あなたは今それを持って

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

として、それは可変個の引数を受け入れますが、あなたは、AAから(引数の)配列に渡しています。

+0

既に初めにそれを試しました..ありがとうとにかく... 私の解決策は以下です.. –

+0

投稿したコードでうまく動作します。 – Kekoa

+0

1つではありませんupvote?スタックオーバーフローへようこそ。 – Kekoa