AS3可以返回两种类型的方法的最佳实践

| 我一直在开发ActionScript 3的框架,并且遇到了一个特殊的场景,在该场景中,我希望一种方法能够返回ѭ0或包含多个ѭ0实例的ѭ1。 采用此方法注册一个或多个
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];
}
以上几点: 在我看来这太草率了。真假的啊? 我也可以使用通配符(星号*)作为返回类型,这更有意义吗? 是否可以仅实际定义两种返回类型?仅出于可读性等目的。     
已邀请:
        据我所知,所有对象都是通过引用传递的:   在ActionScript 3.0中,所有参数都通过引用传递,因为所有值都存储为对象。但是,属于原始数据类型的对象(包括Boolean,Number,int,uint和String)具有特殊的运算符,这些运算符使它们的行为就像通过值传递一样。 您无需返回任何内容,只需设置
fw
变量成员即可。 话虽这么说,您对如何返回多个变量有一些选择。 一种常见的方法是返回返回的数组的计数,并使用一个参数来设置数组。呼叫将类似于
var length:int = register(out, object1, object2, object3)
。然后可以在for循环中使用
length
变量。 另一种方法是返回整个数组。我认为不需要更多的解释,但是我想说明的是,如果需要特定的成员,则可以直接使用返回的数组。例如,如果您要第一个对象,则可以写
t:Thing = fw.register(new Thing())[0];
。注意结尾处的[0]。 您也可以使用上述方法,但要使用由
Array
构成的
Object
。 我个人不喜欢返回抽象对象,通常我选择返回整个数组。 希望这可以帮助。     
         从某种严格的意义上讲,这可能是草率的,但我看到的要糟得多。 您应该始终尽可能缩小返回类型。因此,将*作为返回类型比IMO更糟糕。 不,您不能有两种返回类型。 如果您对其进行了良好的测试并记录了下来,那么可以使用。 但是,您总是返回一个数组怎么样,如果只有1个结果,那么您返回的数组大小为1?     
        就个人而言,在这种情况下,我将返回1项数组以保持一致性。这将使界面更加合理。调用者总是可以期望返回一个数组,而不必通过对不同的返回对象做出不同的响应来使代码更加复杂。 现在也存在这样的情况,无论类型是什么,代码都将以完全相同的方式对返回的对象做出响应,在这种情况下,这意味着返回的对象是从某个通用基类继承的。在这种情况下,返回类型应该是公共基类。 (我假设我在这里假设您不会以完全相同的方式对Array和AvFrameworkObject进行响应)     

要回复问题请先登录注册