2010-08-04 19 views
0

我相當積極,我想要做的事對ActionScript來說是不可能的,但是如果出錯,這將是件很好的事情。在AS3中通過引用更改var的值

我需要將一個變量引用傳遞給一個函數,並讓該函數改變該變量的值。

所以,簡化和不完全正確的語法,是這樣的:

function replaceValue(element:*, newValue:String):void 
{ 
    element = newValue; 
} 

var variableToModify:String = "Hello"; 
replaceValue(variableToModify, "Goodbye"); 

trace(variableToModify) // traces value of 'Hello', but want it to trace value of 'Goodbye' 

當然,在replaceValue功能,element是一個新的參考fungibleValue(或者更確切地說,一個新的參考fungibleValue的價值)。所以,當element被設置爲值newValue時,fungibleValue不會改變。這是預期的,但完全不是我想要的,在這種情況下。

有一個類似的問題,爲Ruby,這裏Changing value of ruby variables/references

由於問題指出,Ruby有辦法做到這一點。但有沒有任何方式在ActionScript中做到這一點?

如果是這樣,它會讓我覺得很愚蠢。

回答

1

不,這是不可能的功能將永遠得到的價值,而不是參考。但是,如果你能打電話replaceValue爲什麼不從你的函數返回新值:

function replaceValue(base:Object, fieldName:String, newValue:String):void { 
// do your work 
base[fieldName] = newValue; 
} 

var o:Object={ variableToModify:"Hello" }; 
replaceValue(o, "variableToModify", "Goodbye"); 

trace(o.variableToModify); 

function replaceValue(element:*, newValue:String):String 
{ 
// .. do your work 
return newValue; 
} 

var variableToModify:String = "Hello"; 
variableToModify = replaceValue(variableToModify, "Goodbye"); 

trace(variableToModify) 

如果你傳遞一個對象或類,您可以根據自己的名字作爲修改一個fiels

+0

謝謝,帕特里克。你的建議幫助我思考了這個問題的最後階段。我幾乎想到了將變量包裝到Object中的想法,但是我最終將一個回調函數傳遞給了'replaceValue'方法(這是對另一個對象的靜態方法,btw)。現在只需在回調中設置變量的值。其中,是的,非常嚴重,但是......在這種情況下是一個體面的解決方案。再次感謝。 – 2010-08-04 21:35:09