2011-01-12 81 views
1

如何在AS3中通過引用在for each構造中傳遞值?基本上,我想要的東西等同於下面的代碼在PHP中:在AS3中通過引用傳遞

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

這將使我通過一個循環改變集合$array的所有元素。

+1

在ActionScript中,您只能將值傳遞給方法。 「通行證」不是在這裏使用的正確的詞,因爲你沒有傳遞任何東西,只是訪問它。 – JeffryHouser 2011-01-12 20:48:40

回答

1

編輯: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>; 
} 
+0

+1,因爲我認爲這是原來的海報之後。不過,他的談話如果通過參考傳遞是令人困惑的。 – JeffryHouser 2011-01-12 20:49:17

+0

-1,因爲這段代碼不會做任何接近原始發佈者想要的內容:它不會改變原始數組,但會爲每個迭代中包含引用的var設置一個新值。只需在for循環之後跟蹤數組 - 所有內容都將與之前相同。 – weltraumpirat 2011-01-12 21:30:15

+0

你對每個代碼都是錯誤的。如果您的數組中有重複的項目,它會失敗:除非您傳遞初始偏移量,否則indexOf將默認從數組的開頭檢索第一次出現的項目;但爲此你需要一個索引;你可以保留一個計數器,但是a)迭代順序不能保證,所以它可能會失敗; b)如果你需要保持一個計數,反正最好使用常規的for/while循環。此外,您正在循環中進行線性搜索,並使用indexOf進行另一次搜索(可能線性),所以我會說這會增加問題的不必要的複雜性。 – 2011-01-13 02:16:37

5

指針不存在於AS3中,因此您需要使用Array.forE ACH方法,該陣列中的每個項目執行的函數:

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,所有參數都是通過引用傳遞的,因爲所有值都以對象的形式存儲。但是,屬於基本數據類型(包括布爾值,數字,int,uint和String)的對象具有特殊的運算符,它們的行爲就像按值傳遞一樣。

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

1

你不能做到這一點,他們這樣你在PHP中做到這一點。每個循環都會產生一個參考變量v,您可以使用它來獲取該值,但設置v = v + 1不會更改原始數組,但會擦除該參考並將新值僅設置爲v。但您仍然可以修改在一個循環中的所有數組值:

對於一個簡單的數組(它實際上是在Flash的對象)

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

對於關聯數組,使用...在:

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]; 
} 

我認爲第二個是你正在尋找的。