有没有办法在运行时期间查看ActionScript 3中匿名函数的签名?
我想验证作为其他函数的参数传入的Function
个对象,并确保它们接受正确数量的参数(使用正确的类型)并返回正确类型的值。
flash.utils.describeType()
似乎没有为匿名函数返回此信息。
答案 0 :(得分:4)
它看起来不像运行时允许你反思匿名函数,这是一种耻辱。
匿名函数(可能按定义)标记为dynamic
。如果将不兼容的类型传递给匿名函数,则不会抛出任何错误。任何类型的不匹配都将尽可能默默地进行。例如,将"minotaur"
作为uint
参数传递会产生0
(零)。
如果你真的想过度设计它,你就可以获得所有OO。您可以声明包含相应函数签名的接口,并接受实现该接口的对象,而不是接受匿名函数。
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函数的签名不正确将会有多严重。
您可以分享一下您正试图解决的问题吗?
答案 1 :(得分:1)
作为粗略的近似,您可以使用length属性检查参数的数量,例如:
function doStuff(callback:Function) {
trace(callback.length);
}
我不知道有任何方法可以枚举匿名函数的参数;你当然可以验证事后捕获的ArgumentError。