我一直在为ActionScript 3开发一个框架,并且遇到了一个奇特的场景,我想让一个方法能够返回包含{AvFrameworkObject
或Array
的多个实例的AvFrameworkObject
或AvFrameworkObject
1}}。
使用此方法注册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}}
以上几点:
答案 0 :(得分:4)
从某种严格意义上讲,这可能是草率的,但我看到的情况要糟糕得多。
您应始终尽可能缩小返回类型。因此,*作为返回类型的IMO比对象更差。
不,你不能有两种返回类型。
如果您对它进行了很好的测试并将其记录得很好,那么可以使用它。
但是你总是返回一个数组,如果只有1个结果,那么你返回一个大小为1的数组?
答案 1 :(得分:3)
据我所知,所有对象都通过了by reference:
在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] 。Object
Array
{{1}}
我个人不喜欢返回抽象对象,通常我选择返回整个数组。
希望这有帮助。
答案 2 :(得分:0)
在这种情况下,我会返回1项数组以保持一致性。这将使一个更明智的界面;调用者总是可以期望返回一个数组,而不必通过对不同的返回对象做出不同的响应来使代码更复杂。
现在还存在这样的情况:代码将以完全相同的方式响应返回的对象,无论它的类型是什么,在这种情况下,这意味着返回的对象继承自某个公共基类。在这种情况下,返回类型应该是公共基类。
(我想我在这里假设您不会以完全相同的方式响应数组和AvFrameworkObject)