首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行时(反射)在AS3中检查匿名函数签名

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

Stack Overflow用户
提问于 2008-12-02 12:48:42
回答 2查看 1.9K关注 0票数 4

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

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

对于匿名函数,flash.utils.describeType()似乎不会返回此信息。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-12-08 03:13:14

它看起来不像运行时允许您在匿名函数上进行反射,这是一种遗憾。

匿名函数(可能根据定义)被标记为dynamic。如果将不兼容的类型传递给匿名函数,则不会引发错误。任何类型不匹配都将被尽可能静默地转换。例如,将类似"minotaur"的内容作为uint参数传递将产生0 (零)。

如果你真的想过度设计它,你可以把所有的面向对象都放在它上面。您可以声明一个包含适当函数签名的接口,并接受实现该接口的对象,而不是接受匿名函数。

代码语言:javascript
复制
public interface IFancyCallback {
  public function fancyFunction(frog:Frog, princess:Girl):UsefulReturnType;
}

而你的函数只需要打包在一个对象中:

代码语言:javascript
复制
public class ConcreteCallback implements IFancyCallback {
  public function fancyFunction(frog:Frog, princess:Girl):UsefulReturnType {
    princess.kiss(frog);
    return new UsefulReturnType("jabberwocky");
  }
}

可能会产生大量的代码开销。取决于你打算有多少个回调,谁来做这些回调,以及如果匿名函数的签名不正确会有多严重。

你能分享更多关于你正在努力解决的问题吗?

票数 4
EN

Stack Overflow用户

发布于 2008-12-02 16:09:27

作为粗略的近似,您可以使用length属性检查参数的数量,例如:

代码语言:javascript
复制
function doStuff(callback:Function) {
  trace(callback.length);
}

我不知道有什么方法可以枚举匿名函数的参数;您当然可以在post后捕获ArgumentError时进行验证。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/333841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档