Flash AS3可返回两种类型的方法的最佳实践
我一直在为ActionScript3开发一个框架,遇到了一个特殊的场景,我希望一个方法能够返回一个Flash AS3可返回两种类型的方法的最佳实践,flash,actionscript-3,types,wildcard,return-type,Flash,Actionscript 3,Types,Wildcard,Return Type,我一直在为ActionScript3开发一个框架,遇到了一个特殊的场景,我希望一个方法能够返回一个AvFrameworkObject或一个Array,其中包含AvFrameworkObject的多个实例 采用此方法注册AvFrameworkObject的一个或多个实例: public function register(...objects):Object { var reg:Array = []; var i:AvFrameworkObject; for each(i
AvFrameworkObject
或一个Array
,其中包含AvFrameworkObject
的多个实例
采用此方法注册AvFrameworkObject
的一个或多个实例:
public function register(...objects):Object
{
var reg:Array = [];
var i:AvFrameworkObject;
for each(i in objects)
{
i.fw = this;
reg.push(i);
}
return reg.length > 1 ? reg : reg[0];
}
关于以上几点:
但是你总是返回一个数组,如果只有一个结果,那么你返回一个大小为1的数组怎么样?在这种情况下,我会返回1项数组以保持一致性。这将形成一个更加合理的界面;调用方总是希望返回一个数组,而不必通过对不同的返回对象做出不同的响应使代码更加复杂 现在还有一种情况,代码将以完全相同的方式响应返回的对象,无论其类型是什么,在这种情况下,这意味着返回的对象继承自某个公共基类。在这种情况下,返回类型应该是公共基类
(我想我在这里假设您不会以完全相同的方式响应数组和AvFrameworkObject)据我所知,所有对象都被传递: 在ActionScript 3.0中,所有参数都通过引用传递,因为所有值都存储为对象。但是,属于基本数据类型(包括Boolean、Number、int、uint和String)的对象具有特殊的运算符,这些运算符使它们的行为如同按值传递一样 您不必返回任何内容,只需设置
fw
变量成员即可
也就是说,您可以选择如何返回多个变量
- 一种常见的方法是返回返回的数组的计数,并使用参数设置数组。调用类似于
。然后可以在for循环中使用var length:int=register(out,object1,object2,object3)
变量length
- 另一种方法是返回整个数组。我认为不需要更多的解释,但我想说明的是,如果您需要特定的成员,可以直接使用返回的数组。例如,如果想要第一个对象,可以编写
t:Thing=fw.register(newthing())[0]代码>。注意结尾处的[0]
- 您也可以使用上述方法,但使用
代替对象
数组
希望这能有所帮助。@Marty Wallace:甚至是返回向量。返回*和返回对象之间的区别是什么?返回一个长度为1的数组是我最初设置的方式,如果我使用var t:Thing=fw.register(new Thing()),看起来更干净;t、 property=“blah”;看看你的代码:我建议返回一个向量。毕竟-想象一下编写客户端代码,其中函数可能返回未知类型的对象。您必须在每次通话中检查其类型。乏味的最好每次都返回一个向量。仅仅因为它是一个包含一个成员的向量而返回第二种类型并不会给任何人带来麻烦。@1978年的《马克》检查这个问题:函数能够返回单个AvFrameworkObject的意义在于,我可以这样做:var obj:AvFrameworkObject=fw.register(new AvFrameworkObject());然后,如果我想一次注册多个实例,我可以,但是如果是这样的话,单个返回就没有意义了。也许我应该将函数拆分为register():AvFrameworkObject和registerMultiple():Array。你怎么认为?