在AS3中通过引用传递

时间:2011-01-12 18:52:03

标签: php flex actionscript-3

如何在AS3中的for each构造内通过引用传递值?基本上,我想要一些与PHP中的以下代码相同的东西:

foreach ($array as &$v) {
  $v = $v + 1;
}

这将允许我通过单个循环更改集合$array的所有元素。

3 个答案:

答案 0 :(得分:5)

AS3中不存在指针,因此您需要使用Array.forEach方法对数组中的每个项执行函数:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html?filter_coldfusion=9&filter_flex=3&filter_flashplayer=10&filter_air=1.5#forEach%28%29

有点偏离主题,但有关AS3中的值和引用的更多信息(对于函数)

  

在ActionScript 3.0中,所有参数都通过引用传递,因为所有值都存储为对象。但是,属于原始数据类型的对象(包括Boolean,Number,int,uint和String)具有特殊的运算符,使它们的行为就像它们按值传递一样。

http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f56.html

答案 1 :(得分:1)

你不能用PHP的方式做到这一点。 for each循环将产生一个可用于获取值的引用变量v,但设置v = v + 1不会更改原始数组,但擦除引用并仅将新值设置为v。但您仍然可以修改一个循环中的所有数组值:

对于一个简单的数组:

var array1 : Array = [ "one", "two", "three" ];
for (var i : int = 0; i < array1.length; i++)
{
    array1[i] = "number " + array1[i];
}

对于关联数组(它实际上是Flash中的对象),请使用... in:

var array2 : Object = { one:"one", two:"two", three:"three" };
for (var s:String in array2) // s is the string value of the array key
{
    array2[s] = "number " + array2[s];
}

我认为第二个是你正在寻找的。

答案 2 :(得分:0)

编辑:weltraumpirat是正确的。我原来的例子没有修改原始数组的内容,这可能是原始海报想要的内容。以下是一些更新的示例:

使用for each更新了示例:

for each (var s:String in arr)
{
  arr[arr.indexOf(s)] = "<Your value here>";
}

使用标准for循环更新示例:

for (var counter:int = 0; counter < arr.length; counter++)
{
  arr[counter] = "<your value here>";
}

原始示例[不正确]:

for each (var s:String in array)
{
  s = <your value here>;
}