什么是最清洁的方式来模拟通过参考在Actionscript3.0?
-
09-06-2019 - |
题
Actionscript3.0(并且我假定Javascript,并写在一般)缺乏通过引进当地类型的喜欢整数.结果我发现越来越值从一个功能真笨重。什么是正常模式的工作围绕这个吗?
例如,是否有一个清洁的方式来实现 交换(intA,intB) 在Actionscript?
解决方案
我相信你能做的最好是通过一个容器对象作为一个参数的一个函数和改变价值观中的某些属性,对象:
function swapAB(aValuesContainer:Object):void
{
if (!(aValuesContainer.hasOwnProperty("a") && aValuesContainer.hasOwnProperty("b")))
throw new ArgumentError("aValuesContainer must have properties a and b");
var tempValue:int = aValuesContainer["a"];
aValuesContainer["a"] = aValuesContainer["b"];
aValuesContainer["b"] = tempValue;
}
var ints:Object = {a:13, b:25};
swapAB(ints);
其他提示
我想一个替代办法将是某个地方确定这样的事情...
public class Reference {
public var value:*;
}
然后使用功能,采取一些数量的基准参数作为"指"如果你真的只想在"出去"的参数,无论是初始化它们上方式在或不和你交换将成为:
function swap(Reference a, Reference b) {
var tmp:* = a.value;
a.value = b.value;
b.value = tmp;
}
你总是可以去,坚果,并确定具体IntReference,StringReference,等等。
这是吹毛求疵,但是 int
, String
, Number
和其他人 都 通过了基准,这只是他们是不可变的。当然,效果是一样的,如果他们传递的价值。
你也可以使用的包装,而不是int:
public class Integer
{
public var value:int;
public function Integer(value:int)
{
this.value = value;
}
}
当然,这会更有用的,如果你能使用操作人员超载的...
只是来看看一些Java代码。Java了《公约》的基准类型通过参照和基本类型是传递的价值,因为它的开始。这是一个非常好的模式在许多方面。
但是在谈论交换,最好的和最简单的方法来做一个交换在Java/AS3是与以下三行:
var temp:int = array[i]; array[j] = array[i]; array[i] = temp;
世界上没有任何真正的原因需要使用一种功能做一个简单的交换,当你可以更快地做到这一点,只需3个线。
它是令人讨厌。但是如果您使用的不同语比例如C#你可以得到合理品质的成果。如果你需要通过大量的参数来回传递一个对象充满了所需的数据,并改变对象的参数,当你返回。对象类是只是这类的事情。
如果你只需要回一大堆的数据,返回一个对象。这更多的是在保持与写风格的比通过ref语义。
解构分配(如:[a,b]=[b])不是定义中的通信机制详解-262 3规范,它的没有实现在JavaScript1.5,这是该版本相当于JScript实施在即。我已经看到这种语法在AS4规格预虽然,我相信这是的一部分JavaScript1.7.
如果ActionScript样工作的Javascript,
[a,b] = [b,a]