有没有办法在运行时查看ActionScript 3中匿名函数的签名?
我想验证作为参数传递给其他函数的Function对象,并确保它们接受正确数量的参数(具有正确的类型)并返回正确类型的值。
对于匿名函数,flash.utils.describeType()似乎不会返回此信息。
发布于 2008-12-08 03:13:14
它看起来不像运行时允许您在匿名函数上进行反射,这是一种遗憾。
匿名函数(可能根据定义)被标记为dynamic。如果将不兼容的类型传递给匿名函数,则不会引发错误。任何类型不匹配都将被尽可能静默地转换。例如,将类似"minotaur"的内容作为uint参数传递将产生0 (零)。
如果你真的想过度设计它,你可以把所有的面向对象都放在它上面。您可以声明一个包含适当函数签名的接口,并接受实现该接口的对象,而不是接受匿名函数。
public interface IFancyCallback {
public function fancyFunction(frog:Frog, princess:Girl):UsefulReturnType;
}而你的函数只需要打包在一个对象中:
public class ConcreteCallback implements IFancyCallback {
public function fancyFunction(frog:Frog, princess:Girl):UsefulReturnType {
princess.kiss(frog);
return new UsefulReturnType("jabberwocky");
}
}可能会产生大量的代码开销。取决于你打算有多少个回调,谁来做这些回调,以及如果匿名函数的签名不正确会有多严重。
你能分享更多关于你正在努力解决的问题吗?
发布于 2008-12-02 16:09:27
作为粗略的近似,您可以使用length属性检查参数的数量,例如:
function doStuff(callback:Function) {
trace(callback.length);
}我不知道有什么方法可以枚举匿名函数的参数;您当然可以在post后捕获ArgumentError时进行验证。
https://stackoverflow.com/questions/333841
复制相似问题