我正在将一个函数传递给另一个运行良好的函数。假设函数“inner”被传递给“outer”函数。我的问题是,我希望函数“outer”能够检查函数“inner”和它们的类型中是否有任何参数。我将内部函数用作回调函数,因此具有特定类型的一个参数非常重要。我想尽早地发现任何问题,所以需要“外部”功能来检查。Flex:传递函数并检查参数
如何检查函数的参数?这在Flex中可能吗?
感谢
我正在将一个函数传递给另一个运行良好的函数。假设函数“inner”被传递给“outer”函数。我的问题是,我希望函数“outer”能够检查函数“inner”和它们的类型中是否有任何参数。我将内部函数用作回调函数,因此具有特定类型的一个参数非常重要。我想尽早地发现任何问题,所以需要“外部”功能来检查。Flex:传递函数并检查参数
如何检查函数的参数?这在Flex中可能吗?
感谢
在编译时
事实上它可能有编译时检查。这取决于你愿意做出多大的飞跃。为此,您必须在编写代码时使用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项目,它会照顾你的缓存。
它是否必须在编译时或运行时检查好吗? – RIAstar
理想的编译时间,但我不认为这是可能的。我认为运行时间很好。我只想尽快解决任何问题。 – RNJ