如果我设置了一个接受回调的函数:
function loadSomething(path:String, callback:Function):void;
并且该回调应该接受给定的类型,例如String来表示一些加载的信息:
function onLoaded(response:String):void;
// Load some data into onLoaded.
loadSomething("test.php", onLoaded);
是否可以评估将用于回调的函数,并确保它具有给定数量的参数并且参数接受正确的类型? e.g。
function broken(arg:Sprite):void;
// This should throw an error.
loadSomething("test.php", broken);
答案 0 :(得分:2)
我认为你不应该费心去做这种检查,因为它会造成不必要的开销。您可以在执行回调时抛出异常:
try {
doCallback(response);
} catch(e:*) {
trace('Incompatible callback');
}
如果您真的想要进行检查,您可以使用反射来完成检查。只需从describeType(callback)
调用flash.utils
并解析XML。
答案 1 :(得分:-1)
您可以做的一件简单事情是通过在方法闭包上调用length
属性来检查可接受参数的数量,如:
function some ( val1 : int, val2 : int ) : void { return; }
trace(some.length); // traces 2
其他更复杂的方法可能是使用AS3Commons bytecode library。您可以试用dynamic proxies。