【问题标题】:Flex: passing in function and checking parametersFlex:传入函数和检查参数
【发布时间】:2012-01-13 06:50:14
【问题描述】:

我将一个函数传递给另一个运行良好的函数。假设函数“inner”被传递给函数“outer”。我的问题是我希望函数“外部”能够检查函数“内部”中是否有任何参数及其类型。我将内部函数用作回调,因此它具有一个特定类型的参数很重要。我想尽早发现任何问题,所以希望“外部”功能检查这一点。

如何检查函数的参数?这在 Flex 中可行吗?

谢谢

【问题讨论】:

  • 必须在编译时还是运行时检查正常?
  • 理想的编译时间,但我认为这是不可能的。我认为运行时很好。我只想尽快发现任何问题。

标签: apache-flex function flex4 callback closures


【解决方案1】:

在编译时

实际上可以进行编译时检查。这仅取决于您愿意做出多大的飞跃。为此,您必须在 Haxe 而不是 ActionScript 中编写代码,并在编译时使用 targeting the Flash platform。在 Haxe function types on Devboy's blog 上有很好的阅读。

在运行时

如果你不想走那么远,下面是在 AS 中的方法:你必须使用 describeType() 函数。假设你有一个像这样的测试类:

public class TestClass {    
    public function test(s:String):void {}
}

我们现在可以通过编写来获取有关其功能的信息:

var info:XML = describeType(TestClass);

在这个 XML 对象的某个地方会有一个如下所示的节点:

<method name="test" declaredBy="net.riastar.test::TestClass" returnType="void">
  <parameter index="1" type="String" optional="false"/>
</method>

来了!进行检查所需的所有信息。 但是这种方法有一个很大的警告:describeType 方法效率不高。如果你必须这样做很多,它会减慢你的应用程序。不过,您可以使用缓存策略来避免这种情况。或者查看as3-commons-reflect 项目,它会为您处理缓存。

【讨论】:

  • 如果你愿意稍微宽松一点,你可以看看函数的长度参数,看看它需要多少参数。
  • 您的方法名称是 test,但 XML 中的名称是 start。是不是打错字了?
  • @merv 复制/粘贴错误。马上修复。感谢您指出这一点。
  • 想了很多,但我不想自己编辑它,以防万一我读错了。现在你得到了 +1 ;)
  • 优秀。这是一个很好的答案。我不知道haXe,所以我会查一下。目前虽然我会尝试 describeType。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 2012-12-26
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
相关资源
最近更新 更多