在AS3中运行时检查匿名函数签名(反射)

时间:2008-12-02 12:48:42

标签: actionscript-3 reflection function

有没有办法在运行时期间查看ActionScript 3中匿名函数的签名?

我想验证作为其他函数的参数传入的Function个对象,并确保它们接受正确数量的参数(使用正确的类型)并返回正确类型的值。

flash.utils.describeType()似乎没有为匿名函数返回此信息。

2 个答案:

答案 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。