2009-08-26 12 views
1

Est-il possible de passer un paramètre à une méthode ByRef (ou out etc) dans ActionScript 3?Passer des variables ByRef dans Actionscript 3

J'ai des variables de portée globale en haut de ma classe et ma méthode va remplir cette variable si c'est == null.

Je passe dans la variable qui doit être remplie mais jusqu'ici mes efforts ont retourné une variable localement peuplée en laissant la version globalement limitée encore nulle.

La variable transmise à ma méthode varie donc je ne peux pas la coder en dur dans ma méthode et la définir simplement.

Répondre

4

ActionScript 3 passes params par référence par défaut, comme Java - sauf pour les types primitifs. Mais ce que vous essayez de faire faire, ce n'est pas de passer par référence. Le paramètre passé est une référence à un objet (dans le cas où ce n'est pas un type primitif), que vous pouvez modifier dans la fonction.

Mais, pour répondre à votre question. Voici une solution:

function populateIfNull(variableName, value){ 
    this[variableName] = this[variableName] || value 
} 

que vous pouvez utiliser comme:

populateIfNull('name', 'Bob') 
populateIfNull('age', 20) 
1

AS3 n'a pas de passage par référence (il est similaire à Java à cet égard, en ce sens qu'il passe des références par valeur).

Quelque chose de semblable peut être simulé si vous contrôlez le code client en enveloppant l'objet dans un autre objet:

var myObj = null; 
myFun({ a: myObj }); 
function (param) { 
    if (param.a == null) { 
    param.a = "Hello"; 
    } 
} 
1

Utilisez les objets.

par exemple:

var myObj : Object = new Object(); 
var myArr : Array; 

myObj.arr = myArr; 

function populateViaRef(obj : Object) : void { 
    obj.arr = new Array(); 

    for(var i : Number = 0; i < 10; i++) 
    obj.arr[i] = i; 

} 

populateViaRef(myObj); 

for(var i : Number = 0; i < 10; i++) 
    trace(myObj.arr[i]); 
0

Dans ActionScript 3.0, tous les arguments sont passés par référence, parce que toutes les valeurs sont stockées sous forme d'objets. Cependant, les objets appartenant aux types de données primitifs, qui incluent Boolean, Number, int, uint et String, ont des opérateurs spéciaux qui les font se comporter comme s'ils étaient passés par valeur. http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f56.html

En Java, les arguments sont passés par valeur. http://javadude.com/articles/passbyvalue.htm

+0

Ancienne réponse. Mais mal. Les valeurs ne sont pas stockées en tant qu'objets et transmises en tant que références. Vous pouvez construire un objet 'global.uint', mais ce ne sera pas la primitive' uint'. – Hydro

+0

Un objet est un type primitif, mais il est stocké comme un pointeur. – Hydro