2010-03-04 34 views
2

我目前在做這樣的事情:AS3:如何強制參數回調函數

myFunc(tracer); 

function tracer(message:String):void{ 
trace(message); 
} 

function myFunc(callback:Function):void{ 
callback("Hello"); 
} 

現在,這工作正常。但是,如果給定的回調函數在其簽名中接受正確數量和類型的參數,函數myFunc如何知道?

我想避免這種我稱之爲像這樣的地方在我的代碼:

myFunc(tracer2); 

function tracer2():void{ 
trace("done"); 
} 

function myFunc(callback:Function):void{ 
// Argument mismatch! 
callback("Hello"); 
} 

有沒有辦法做這樣的事情,爲了使用編譯器警告/錯誤信息,從而避免在異常運行?

// Won't work :-(
function myFunc(callback(message:String):Function):{ 
callback("Hello"); 
} 

回答

3

我的理解是,這是一種只能在運行時捕獲的情況。 AS3沒有提供這種類型檢查的機制。我建議如果這很重要,那麼通過傳遞具有強類型接口的對象而不是簡單地傳遞一個函數來獲得編譯時檢查,其中所需的類型信息將會丟失。

+0

太糟糕了:-( ,AS3是有點更強大。 – Timo 2010-04-02 11:26:17

1

我想你可以在myFunc中添加第二個參數,它會給出有關將要發送到回調函數的參數的信息。 這樣你可以在一個地方有myFunc(tracer2,"null"),在另一個地方可以有myFunc(tracer,"String")

我會嘗試像祝

function myFunc(callback:Function, ParamRequest:Array /* of String */):void{ 
}