有没有办法在运行时查看 ActionScript 3 中匿名函数的签名?
我想验证Function
作为参数传入其他函数的对象,并确保它们接受正确数量的参数(具有正确的类型)并返回正确类型的值。
flash.utils.describeType()
似乎没有为匿名函数返回此信息。
有没有办法在运行时查看 ActionScript 3 中匿名函数的签名?
我想验证Function
作为参数传入其他函数的对象,并确保它们接受正确数量的参数(具有正确的类型)并返回正确类型的值。
flash.utils.describeType()
似乎没有为匿名函数返回此信息。
看起来运行时不允许您反映匿名函数,这是一种耻辱。
匿名函数(可能根据定义)标记为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");
}
}
可能会产生大量代码开销。取决于您打算拥有多少回调,谁将进行回调,以及如果 anon 函数的签名不正确会有多严重。
你能分享更多关于你试图解决的问题吗?
作为粗略的近似值,您可以使用长度属性检查参数的数量,例如:
function doStuff(callback:Function) {
trace(callback.length);
}
我不知道有任何方法可以枚举匿名函数的参数;您当然可以验证事后捕获 ArgumentError。