2010-08-04 8 views
0

Je suis assez positif ce que je veux faire n'est pas possible avec ActionScript, mais ce serait bien d'avoir tort.Modification de la valeur d'un var via référence dans AS3

Je dois passer une référence variable à une fonction et faire en sorte que la fonction change la valeur de la variable.

Ainsi, simplifiée et non dans la syntaxe tout à fait correct, quelque chose comme ceci:

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' 

Bien sûr, dans la fonction replaceValue, element est une nouvelle référence à fungibleValue (ou, plutôt, une nouvelle référence à fungibleValue de la valeur). Ainsi, alors que element est défini sur la valeur newValue, fungibleValue ne change pas. C'est prévu mais totalement pas ce que je veux, dans ce cas.

Il y a une question similaire, Ruby, ici Changing value of ruby variables/references

La question souligne, Ruby a une façon d'y arriver. MAIS y a-t-il pour faire cela en ActionScript?

Si c'est le cas, ça va me rendre beaucoup plus stupide.

Répondre

1

Non, il n'est pas possible que la fonction obtienne toujours la valeur et non la référence. Mais si vous êtes en mesure d'appeler replaceValue pourquoi ne pas retourner la nouvelle valeur de votre fonction:

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

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

trace(variableToModify) 

Si vous passez un objet ou d'une classe, vous pouvez modifier un Fiels en fonction de son nom:

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); 
+0

Merci, Patrick. Vos suggestions m'ont aidé à réfléchir aux dernières étapes de ce problème. Je suis presque allé avec l'idée d'enrouler la variable dans un objet, mais j'ai fini par passer une fonction de rappel à la méthode 'replaceValue' (qui est une méthode statique sur un objet différent, btw). Il suffit de définir la valeur de la variable dans le rappel, maintenant. Ce qui, oui, est assez grossier, mais ... est une solution décente dans ce cas. Merci encore. –

Questions connexes