2010-08-04 18 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