2009-06-09 33 views
2

爲什麼你認爲下面的代碼不起作用? 你會改變/添加,使其工作?AS3參數

任何幫助表示讚賞..

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

我得到一個ArgumentError(錯誤#1063):

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

..所以,傳遞的參數(argum)未能提供所有傳遞的參數..

..請保持完整的功能結構(流量)..我需要一個解決方案使用相同的功能在相同的順序..我必須通過參數變量和使用它們在exec()上述方法..

問候

+0

你得到了什麼錯誤? – CookieOfFortune 2009-06-09 21:02:33

+0

將它添加到上面的帖子..謝謝.. – 2009-06-09 21:20:22

回答

7

好,這裏是解決方案..打破我的頭之後:)

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個Array參數,而不是字符串和int參數。

你可以)改變TraceIt(到:

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

或者你可以改變的exec()來:因爲當你通過 「測試」 出現

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

...,1,你最終會得到第一個值爲「test,1」的數組。不過,這種解決方案並不能超越微不足道的情況。

+0

謝謝,但這是一個非常簡單的實際代碼版本。我的意思是TraceIt代表任何通過的功能......這意味着它始終與衆不同...... – 2009-06-09 21:13:07

1

改變你的BB功能看起來像這樣:

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

正如你現在擁有它,它接受可變數量的參數,但你在一個陣列由AA通過(自變量)。