2011-12-05 103 views
1

我正在将一个函数传递给另一个运行良好的函数。假设函数“inner”被传递给“outer”函数。我的问题是,我希望函数“outer”能够检查函数“inner”和它们的类型中是否有任何参数。我将内部函数用作回调函数,因此具有特定类型的一个参数非常重要。我想尽早地发现任何问题,所以需要“外部”功能来检查。Flex:传递函数并检查参数

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

感谢

+1

它是否必须在编译时或运行时检查好吗? – RIAstar

+0

理想的编译时间,但我不认为这是可能的。我认为运行时间很好。我只想尽快解决任何问题。 – RNJ

回答

2

在编译时

事实上它可能有编译时检查。这取决于你愿意做出多大的飞跃。为此,您必须在编写代码时使用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项目,它会照顾你的缓存。

+0

如果你愿意稍微宽松一点,你可以看看函数的长度参数,以了解它所需的参数数量。 –

+0

您的方法名称是'test',但XML中的名称是'start'。这是一个错字吗? – merv

+0

@merv复制/粘贴错误。立即修复。感谢您指出了这一点。 – RIAstar