如何在AS3中通過引用在for each
構造中傳遞值?基本上,我想要的東西等同於下面的代碼在PHP中:在AS3中通過引用傳遞
foreach ($array as &$v) {
$v = $v + 1;
}
這將使我通過一個循環改變集合$array
的所有元素。
如何在AS3中通過引用在for each
構造中傳遞值?基本上,我想要的東西等同於下面的代碼在PHP中:在AS3中通過引用傳遞
foreach ($array as &$v) {
$v = $v + 1;
}
這將使我通過一個循環改變集合$array
的所有元素。
編輯: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>;
}
+1,因爲我認爲這是原來的海報之後。不過,他的談話如果通過參考傳遞是令人困惑的。 – JeffryHouser 2011-01-12 20:49:17
-1,因爲這段代碼不會做任何接近原始發佈者想要的內容:它不會改變原始數組,但會爲每個迭代中包含引用的var設置一個新值。只需在for循環之後跟蹤數組 - 所有內容都將與之前相同。 – weltraumpirat 2011-01-12 21:30:15
你對每個代碼都是錯誤的。如果您的數組中有重複的項目,它會失敗:除非您傳遞初始偏移量,否則indexOf將默認從數組的開頭檢索第一次出現的項目;但爲此你需要一個索引;你可以保留一個計數器,但是a)迭代順序不能保證,所以它可能會失敗; b)如果你需要保持一個計數,反正最好使用常規的for/while循環。此外,您正在循環中進行線性搜索,並使用indexOf進行另一次搜索(可能線性),所以我會說這會增加問題的不必要的複雜性。 – 2011-01-13 02:16:37
指針不存在於AS3中,因此您需要使用Array.forE ACH方法,該陣列中的每個項目執行的函數:
有點偏離主題,但大約在AS3值和參考文獻的詳細信息(對於功能)
在ActionScript 3.0,所有參數都是通過引用傳遞的,因爲所有值都以對象的形式存儲。但是,屬於基本數據類型(包括布爾值,數字,int,uint和String)的對象具有特殊的運算符,它們的行爲就像按值傳遞一樣。
你不能做到這一點,他們這樣你在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];
}
我認爲第二個是你正在尋找的。
在ActionScript中,您只能將值傳遞給方法。 「通行證」不是在這裏使用的正確的詞,因爲你沒有傳遞任何東西,只是訪問它。 – JeffryHouser 2011-01-12 20:48:40